Могу ли я передать переменные в Eval? - PullRequest
4 голосов
/ 08 июня 2010

Я пытаюсь передать переменную динамически объявленному методу, например:

eval(def test(name)
 puts name
end
test 'joe')

но это не работает.

Есть ли способ сделать это?

Ответы [ 3 ]

10 голосов
/ 08 июня 2010

eval ожидает строку. Следующее должно работать нормально:

eval "def test(name)
  puts name
end
test 'joe'"
7 голосов
/ 08 июня 2010

Если вы хотите объявить метод динамически, то лучший способ сделать это - использовать define_method вместо eval, например,

define_method(:test) do |name|
  name
end

test 'joe'
#=> joe

Не используйте eval, если это не является абсолютно необходимым, и вы на 120% уверены, что это безопасно. Даже если вы на 120% уверены, что это безопасно, попробуйте поискать другие варианты, и если вы найдете такой, используйте его вместо eval.

0 голосов
/ 08 июня 2010

Я немного запутался в том, что вы пытаетесь сделать. Если вы пытаетесь определить метод с помощью eval, который может принимать параметр, вот пример:

eval "def test(name)
  puts name
end"

test 'joe'

Если вы хотите использовать eval для определения метода, который более динамичен и использует переменную, поскольку, как указал Брайан, eval принимает строку, вы должны сделать что-то вроде этого:

test_name = 'joe'
eval "def test
  puts '#{test_name}'
end"

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