nil.respond_to? :to_proc # -> false [].map(&nil) # -> #<Enumerator: []:map>
なんでEnumeratorがかえってくるんだ? としばし悩んだ。
def foo block_given? ? yield : puts("not given") end foo(&nil) # -> "not given" foo { puts "Hello" } # -> "Hello"
つまりブロック引数が渡っていなかったので、Enumerable#mapはEnumeratorを返しただけだった。&による暗黙の手続きオブジェクトへの変換の優先順位みたいなの、いまいちわかっていない。