Ruby - 変数をevalメソッドに渡す

メソッドを参照する変数があり、メソッドをevalキーワードで呼び出す

a_test = "myvariable"
eval a_test


def myvariable
(...)
end

メソッドに変数を渡したいと思います。

def myvariable(var1)
(...)
end

誰かがこれを達成するための "イディオム"の方法に精通していますか?のような何かをする

eval a_test "string_test" 

"a_test"という関数のインタプリタによってルックアップが行われるため、自然に失敗します。

1
これを試してください eval "#{a_test}( 'string_test')"
追加された 著者 Naren Sisodiya,
この場合、 myvariable は変数ではありません。
追加された 著者 Guilherme Bernal,

1 答え

これはあなたのために働くはずです

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

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

#=> hello world

しかし、ルビーでは、このようなことを行う方が適切です

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

puts send(a_test, 'world')

#=> hello world

Read more about send

12
追加された
+1は非評価ソリューションです。
追加された 著者 KL-7,
ああ - ありがとう!
追加された 著者 Robert,