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 - это строка, сопоставленная в скобках.