Rubyはいつも俺に新鮮な驚きを提供してくれる
こんなコードがあった。 blockの評価結果が偽だったらエラーにする、という意図だと。
def die!(&block)! yield || raise("error") end
実行
irb(main):008:0> die! { true } RuntimeError: error from (irb):6:in `die!' from (irb):8 from /usr/local/var/rbenv/versions/1.9.3-p448/bin/irb:12:in `<main>' irb(main):009:0> die! { false } => true
( ゚д゚) ?!
正しくはこうですね
def die!(&block) yield || raise("error") end
syntax errorにはなりませんか。そうですか……。