Rubyのcaseを圧縮
whenの後の条件式のあとは改行しないとエラーになるのでどうしても行数が長くなる
(追記: when A then B でいけます。基本的な事だけど知らなかった・・)
case key when :foo 1 when :bar 2 else 3 end
条件が文字列かシンボルであれば下の様に書いてみてる。
{ foo: 1, bar: 2 }[key] || 3
式を返すなら
a = { foo: ->{ 0 + 1 }, bar: ->{ 1 + 1 } }[key] a ? a.call : 1 + 2
(訂正: {...}[key].call としていたがこれはhashがnilのとき落ちる)
逆に複雑に見える気も。
これは良くない・もっとこうした方がいい等あったら教えていただきたいです。
追記: when A then B で書けることを知った
case key when :foo then 1 when :bar then 2 else 3 end
まあこれならこれでいいかなw