Как использовать строку в имени переменной Ruby? - PullRequest
4 голосов
/ 16 ноября 2011

У меня есть строка, которую я хочу использовать как часть имени переменной.В частности, в путях маршрутов Rails:

<%= foo_path %>
<%= bar_path %>

Я хочу, чтобы первая часть имени маршрута была динамической.Так что-то вроде

@lol = "foo"
<%= [@lol]_path %> # <-- This would really be the "foo_path" variable

Может ли Ruby сделать это?

Ответы [ 2 ]

10 голосов
/ 16 ноября 2011

Конечно:

lol = 'foo'

send "#{lol}_path"
# or
send lol + '_path'

Объяснение: Object#send отправляет метод (т.е. "вызывает" метод на) получателюКак и при любом вызове метода, без явного получателя (например, some_object.send 'foo') текущий контекст становится получателем, поэтому вызов send :foo эквивалентен self.send :foo.На самом деле Rails довольно часто использует эту технику за кулисами ( например ).

2 голосов
/ 30 мая 2013

Нечто большее!

class Person
  attr_accessor :pet
end

class Pet
  def make_noise
     "Woof! Woof!"
  end
end

var_name = "pet"
p = Person.new
p.pet = Pet.new
(p.send "#{var_name}").make_noise

Итак, что здесь происходит:p.send "some_method" вызывает p.some_method, а окружение в круглых скобках делает возможным создание цепочки, т.е. в конце вызывается p.pet.make_noise.Надеюсь, я в порядке.

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