Как используется конструкция {{...} в Ruby? - PullRequest
2 голосов
/ 06 марта 2012

Я не понимаю, как конструкция {{...} используется в Ruby.

Я видел в использованном в примере регулярного выражения на http://www.ruby -doc.org / core-1.9.3 / Regexp.html

place = "tokyo"
/#{place}/.match("Go to tokyo")
    #=> #<MatchData "tokyo">

Как называется эта функция # {...}, и кто-нибудь знает о некоторых хороших рабочих примерах этого.

Действительно ценюпомощь.

Спасибо!

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

Вот пример, который немного проще:

place = "Tokyo"
puts "Go to #{place}"

Что делает конструкция #{...}, так это выполняет содержащийся в ней код ruby ​​и возвращает строковое представление результата, которое затем внедряетсяв строке, где появляется конструкция.

Другой пример:

place = "Tokyo"
puts "#{place} is a #{place.class} of #{place.length} characters"

Другими словами, ваш пример эквивалентен:

/tokyo/.match("Go to tokyo")

Надеюсь, это поможет.

3 голосов
/ 06 марта 2012

Называется интерполяция и позволяет преобразовывать заполнители в значение, которое они представляют ...

http://kconrails.com/2010/12/08/ruby-string-interpolation/

1 голос
/ 06 марта 2012

#{...} особенно полезен и довольно часто используется в метапрограммировании.Это помогает вам динамически отправлять методы, не зная названия этих методов до времени выполнения.

if conf.rc and File.exists?( conf.rc )
  YAML.load_file(conf.rc).each do |k,v|
    conf.send("#{k}=" , v)
  end
end

Как вы можете видеть, до времени выполнения мы не знаем, какие методы будут отправлены.Через .send и #{...} мы можем динамически отправлять методы.Например, в приведенном выше коде в зависимости от значений в conf.rc могут быть отправлены различные методы.

Пример взят из Метапрограммирование Ruby .

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