Ruby - передать переменную в метод eval - PullRequest
1 голос
/ 24 ноября 2011

У меня есть переменная, которая ссылается на метод, я вызываю метод с ключевым словом eval

a_test = "myvariable"
eval a_test


def myvariable
(...)
end

Я бы хотел передать переменную методу, например

def myvariable(var1)
(...)
end

Кто-нибудь знаком с любым "идиомным" способом достижения этой цели? Делать что-то вроде

eval a_test "string_test" 

, естественно, потерпит неудачу, поскольку интерпретатор выполнит поиск для функции с именем "a_test"

1 Ответ

13 голосов
/ 24 ноября 2011

Это должно работать для вас

def myvariable(foo)
  return "hello #{foo}"
end
a_test = "myvariable"

eval "puts #{a_test}('world')"

#=> hello world

В ruby ​​было бы более уместно сделать что-то подобное

def myvariable(foo)
  return "hello #{foo}"
end
a_test = "myvariable"

puts send(a_test, 'world')

#=> hello world

Подробнее о send

...