Я пытаюсь передать переменную динамически заявленным способом, как:Могу ли я передавать переменные в eval?
eval(def test(name)
puts name
end
test 'joe')
, но он не работает.
Есть ли способ сделать это?
Я пытаюсь передать переменную динамически заявленным способом, как:Могу ли я передавать переменные в eval?
eval(def test(name)
puts name
end
test 'joe')
, но он не работает.
Есть ли способ сделать это?
eval
ожидает строку. Следующие должны работать нормально:
eval "def test(name)
puts name
end
test 'joe'"
Спасибо, что напомнил Брайана. Оно работает. Не знаю, почему я пропустил это. – Nick
Я немного смущен тем, что вы пытаетесь сделать. Если вы пытаетесь определить метод с Eval, который может принимать параметр здесь является пример:
eval "def test(name)
puts name
end"
test 'joe'
Если вы хотите использовать Eval определить метод, который является более динамичным и использует переменную, так как Брайан указал из Eval принимает строку, вы могли бы сделать что-то вроде этого:
test_name = 'joe'
eval "def test
puts '#{test_name}'
end"
test
Либо работает, в зависимости от того, что хочет OP. Ясно, что он что-то будет интерполировать, так как иначе, зачем использовать 'eval'? – Matchu
Я пытался прочитать метод, хранящийся в базе данных, а затем выполнить его с параметрами. – Nick
Знаете ли вы, что параметры и их порядок, прежде чем вы его прочитали? Если это так, то использование eval со строкой должно работать. – scottd
Если вы хотите объявить метод динамически, то лучший способ сделать это состоит в использовании define_method
вместо Eval, как и
define_method(:test) do |name|
name
end
test 'joe'
#=> joe
Не используйте eval, если это абсолютно необходимо, и вы на 120% уверены, что это безопасно. Даже если вы на 120% уверены, что он в безопасности, по-прежнему пытайтесь найти другие варианты, и если вы найдете его, то используйте вместо eval.
Я действительно очень смущен относительно того, что вы пытаетесь сделать. 'eval' не является инструментом для этой работы. Как насчет 'define_method'? – Matchu