0

メソッド内で proc を呼び出すと、proc の戻り値によって、proc を呼び出した out ブロック コンテキストからの戻りがトリガーされると思いました。私が呼び出すと、プロシージャからの戻り値があったため、実行されるべきではないtest(a_block)ように感じます。puts "after the block"さらに...test(a_block)そしてtest(b_block)まったく同じように動作します。ここに違いがあるはずだと思いましたか?

a_block = Proc.new do
  puts "in the Proc"
  55
end

b_block = lambda do 
  puts "in the lambda"
  66
end

def test(block)

  puts "in test"
  puts block.call
  puts "after the block"
  99 
end

puts test(a_block)
puts test(b_block)
4

2 に答える 2

1

戻り値

最初の文は次のように読む必要があります

リターンステートメント

使うreturn 66return 55光が見える!

Ruby クロージャーに関する優れた調査は、http: //innig.net/software/ruby/closures-in-ruby.rbで見つけることができます。

于 2011-12-04T17:53:58.330 に答える
0

この質問によると、あなたの例ではまったく同じように動作するはずです。唯一の注目すべき違いはlambda、呼び出されたときに引数の数をチェックするのに対しProc.new、未定義のメソッド エラーを吐き出すことです。

私は Ruby の専門家ではないことに注意してください。あなたの質問を読み、サイドバーの最初の「関連」リンクをクリックしました。今後は慎重に検索してください。

于 2011-12-04T17:52:57.357 に答える