2011-12-04 9 views
0

私はメソッド内でprocを呼び出したときに、procの戻り値がprocを呼び出したアウトブロックコンテキストからの戻り値をトリガーすると考えました。私がtest(a_block)と呼ぶとき、私はputs "after the block"がprocから戻り値があるので実行されるべきではないと感じています。さらに... test(a_block)test(b_block)はまったく同じように動作します。私はここに違いがあると思った?さらに別のprocとラムダのディスカッション

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) 
+0

は、ブロック毎に「復帰」を入れて、あなたは違いが表示されます。 – megas

+1

[Rubyのprocとlambdaの違いは何ですか?](http://stackoverflow.com/questions/1740046/whats-the-difference-between-a-proc-and-a-lambda-in -ruby) –

答えて

0

this questionによると、彼らはあなたの例では全く同じ動作をする必要があります。注目すべき違いは、lambdaは呼び出されたときに引数の数をチェックしますが、Proc.newは未定義のメソッドエラーを吐き出します。

私はRuby-istの専門家ではありません。あなたの質問を読んだ後、サイドバーの最初の「関連する」リンクをクリックして参考にしました。今後、より慎重に検索してください。

1

あなたの最初の文の戻り値

としてreturn文

使用return 66return 55をお読みください、あなたは光を見ることができます! Rubyの閉鎖に

偉大な調査がここで見つけることができます:http://innig.net/software/ruby/closures-in-ruby.rb

関連する問題