&block でブロックを受けるメソッドの振る舞い

なんで?常識?理屈が分からない・・

1.8.7で調べてみたら、どうやら特異メソッドかどうかで振る舞いが違うらしいっす。

irb(main):001:0> def foo(&block)
irb(main):002:1> end
=> nil
irb(main):003:0> foo{ puts "A" }
=> nil
irb(main):004:0> 
irb(main):005:0* 
irb(main):006:0* 
irb(main):007:0* def self.bar(&block)
irb(main):008:1> end
=> nil
irb(main):009:0> bar{ puts "A" }
=> #<Proc:0x0006ccdc@(irb):9>
irb(main):010:0>