yieldとProc#call
MatzさんのyieldとProc#callを読んで。
Matzさんが書いていた、
- Proc#yieldメソッドを導入
- nil.yieldメソッドも用意。これが「no block given」のメッセージを出す
という二点は、現在のRubyでやるとしたら、以下のようになるという意味でしょうか。
class Proc def yield(*a) call(*a) end end def nil.yield(*a) raise LocalJumpError, "no block given", caller(1) end def foo2(&block) block.yield("Rubyco") end foo2() do |name| puts "Hello, #{name}!" end foo2()
実行結果です。
Hello, Rubyco! a.rb:12:in `foo2': no block given (LocalJumpError) from a.rb:19
caller(1)を使えば、呼び出し側のメソッド名(上記なら`foo2')が出るように思うのですが、これは素人考えでしょうか。