ときどきはまるp&block

p obj.meth do
  ...
end

というように書いてしまって、methにブロックがわたらなくて悩んでしまうことがある。なぜかというと、上記の構文は、

p(obj.meth) do
  ...
end

だから。そして、メソッドに必要のないブロックがくっついたとしても、パーズでも実行時でも例外は起きないから。

{}なら直前のメソッドにくっつくので大丈夫

p obj.meth {
  ...
}

p(obj.meth {
  ...
})

と同じ