実行時にシンボルの配列で指定された引数の固定リスト、または名前付きパラメータの固定ハッシュでメソッドを動的に作成するにはどうすればよいですか?はい、私は任意の引数を受け入れるためにスポット演算子を使用することができますが、引数がランタイム配列(またはハッシュ)と一致しないときはいつでも、静的な場合と同様にArgumentError
を発生させたいと思います。動的ではあるが固定引数リストを含むメソッドを動的に作成し、define_methodをrubyで作成しますか?
は静的に、私は今、私は、実行時に、このメソッドを作成したい
def foo(bar,baz)
[bar,baz]
end
foo(1,2) #=>[1,2]
foo(1,2,3) #=> ArgumentError: wrong number of arguments (given 3, expected 2)
を書きます。 define_method: How to dynamically create methods with argumentsによると、私たちはただ
define_method(:foo) do |bar,baz|
[bar,baz]
end
foo(1,2) #=> [1,2]
foo(1,2,3) #=> ArgumentError: wrong number of arguments (given 3, expected 2)
しかし、メソッドを書くとき、私は引数リストを知っている場合にのみ動作することができ。実行時に引数リストしかない場合はどうなりますか?
define_method(:foo) do |*args|
args
end
foo(1,2) #=> [1,2]
foo(1,2,3) #=> [1,2,3]
しかしように、私たちは、静的コードを複製、実行時に与えられた引数のリストに適合するために許可された引数を修正することができます:How do you pass arguments to define_method?で、我々が引数のいずれかの配列を受け入れるようにスプラット演算子を使用することができます示唆されました次のことが起こりますか?私は考えることができる
arr = [:bar,:baz]
define_method(:foo) do |*args=arr| #or some other magic here
args
end
foo(1,2) #=> [1,2]
foo(1,2,3) #=> ArgumentError: wrong number of arguments (given 3, expected 2)
これは、https://stackoverflow.com/q/33425935/336563 – ziggurism
の複製でもあります。https://stackoverflow.com/q/15868381/336563 – ziggurism