case文、便利ですよね。
フラグ管理なんかだと重宝します。
が、ちょっと複雑な事をやろうとすると
そんな時はProcを渡してあげると良くなるかもしれません
実際のところ
あまり適正な例では無いのですが……
ビットフィルタかけて、任意のビットが立ってるか否かを判定するcase文を想定してみます。
x = ARGV[0].to_i base = -> (x,y){(x & y) == x}.curry fltr_01 = base[0b01] fltr_10 = base[0b10] puts case x when fltr_01 then "01" when fltr_10 then "10" end
と、引数をもたずに条件だけで明示することができました。
しかも似たメソッドを一々書き直さず済むのでタイポも減ります。
Curry化を使わない方法
部分適用という方法をつかい
base = -> (x,y){(x & y) == x} fltr_01 =-> x {base.(0b01,x)} fltr_10 =-> x {base.(0b10,x)}
と書き換える事もできます。