Rubyにcall_user_func_array()アナログはありますか? そして、クラス名を含む文字列からクラスを作成するのはどうですか。「eval」でしか見つけられなかった...
2 に答える
1
動的メソッド名を呼び出す場合は、次を使用しますsend
。
user.send("method_#{i}")
これは、 onオブジェクトi = 1
を呼び出す場合です。method_1
user
Ruby
「メソッド/関数を呼び出す」代わりに、「オブジェクトが別のオブジェクトにメッセージを送信する」という用語を使用します。
于 2012-04-15T18:14:06.820 に答える
0
strで指定された関数を、Array a で指定された引数で呼び出すには:
obj.send str, *a
あなたがevalを疑うのは正しいです。ほとんどの場合、Ruby にはもっと良い方法があります。文字列でクラス オブジェクトを取得するには、次を使用します。
Kernel.const_get str
たとえば、次のようになります。
> class A; end
> Kernel.const_get('A').class
=> Class
> Kernel.const_get('A').new
=> #<A:0x100360ac8>
通常、Ruby では、定数名を含む文字列に基づいてクラスを探し出す必要はありません。Ruby では、クラスは実際のオブジェクトであるため、コレクションに直接格納したり、定数や変数に割り当てたりして、最終的に次のようなクラス メソッドを呼び出すことができます#new
。
(some expression).new
于 2012-04-15T20:27:32.103 に答える