読者です 読者をやめる 読者になる 読者になる

foo(&nil)

ruby
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を返しただけだった。&による暗黙の手続きオブジェクトへの変換の優先順位みたいなの、いまいちわかっていない。