Ruby: Что означает 1 доллар?
Я смотрю RailsCast на полиморфных ассоциациях. http://railscasts.com/episodes/154-polymorphic-association?view=asciicast
Там три разных модели Article, Photo и Event, которые каждый из них комментирует Comment.rb. (Статья, Фото и Событие каждый из article_id, photo_id и event_id). При перечислении комментариев у него возникла проблема определения, какая из трех моделей перечисляет комментарии, поэтому он делает это в действии индекса
def index
@commentable = find_commentable
@comments = @commentable.comments
end
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
Мой вопрос: что такое $1
?
Ответы
Ответ 1
Согласно Авди Гримм из RubyTapas
$1 - глобальная переменная, которая может использоваться в более позднем коде:
if "foobar" =~ /foo(.*)/ then
puts "The matching word was #{$1}"
end
Выход
"Соответствующим словом был бар"
Короче говоря, $1, $2, $... являются глобальными переменными, используемыми некоторыми функциями библиотеки ruby специально для REGEX
, чтобы программисты использовали результаты в более поздних кодах.
Смотрите это для таких дополнительных переменных, доступных в Ruby.
Ответ 2
$1
соответствует группе из регулярного выражения выше /(.+)_id$/
. Переменная $1
- это строка, сопоставленная в скобках.