たとえば、yield(param)を使用しても、ブロック{| p1、p2 |を渡すと、問題が発生します。...}これには2つのパラメーターがあります。どのパラメータの生成に時間がかかるかわからない場合、どうすればこれを防ぐことができますか?
3 に答える
1
ブロックでスプラットを使用するか、そこにある可能性のある変数を渡して、それらの定義をテストします。
def foo
yield 1, 2, 3
end
foo do |*args|
if 3 == args.length
# ... then I know I'm dealing with 3 args
end
end
foo do |a, b, c, d|
if !d.nil?
# ... then I know i was passed `d`
end
end
于 2013-03-25T05:13:57.250 に答える
0
Ruby Blocks、Procs、Lambdasに関するこの優れたブログ投稿を参照してください。
ブロック(渡されるものなど)は、渡される引数の数をチェックしないProcfoo() {|p1,p2| ...}
のように機能することを説明しています。ただし、ラムダはそうします。したがって、引数の数を厳密にチェックする必要がある場合は、メソッドでBlockを受け入れることから、メソッド引数としてLambdaを受け入れることに切り替えることができます。
于 2013-03-25T05:10:55.960 に答える
0
の代わりにブロック引数を使用する必要があります。これにより、アリティなどyield
よりも多くの情報が提供されます。yield
def foo *params, &block
...
block.call(*params) if params.length == block.arity
...
end
foo(3){|x| puts x*3} # => 9
foo(3, 4){|x| puts x*3} # => Does not do anything
于 2013-03-25T05:13:45.383 に答える