Руби: Что означает 1 доллар? - PullRequest
19 голосов
/ 25 февраля 2012

Я смотрю RailsCast на полиморфные ассоциации.http://railscasts.com/episodes/154-polymorphic-association?view=asciicast

Есть три разных модели Article, Photo и Event, каждая из которых берет комментарий от Comment.rb.(Article, Photo и Event каждый из article_id, photo_id и event_id).При составлении списка комментариев у него возникает проблема выяснения, для какой из 3 моделей перечислить комментарии, поэтому он делает это в действии index

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?

Ответы [ 2 ]

22 голосов
/ 25 февраля 2012

Согласно Авди Гримм из RubyTapas

$ 1 - это глобальная переменная, которую можно использовать в следующем коде:

 if "foobar" =~ /foo(.*)/ then 
    puts "The matching word was #{$1}"
 end

Вывод:

"Соответствующее слово было bar"

Короче говоря, $ 1, $ 2, $ ... являются глобальными переменными, используемыми некоторыми функциями библиотеки ruby.особенно в отношении REGEX, чтобы позволить программистам использовать результаты последующих кодов.

См. , чтобы узнать больше таких переменных, доступных в Ruby.

14 голосов
/ 25 февраля 2012

$1 соответствует группе из регулярного выражения выше /(.+)_id$/. Переменная $1 - это строка, совпадающая в скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...