Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

livescriptのCurry化

中途半端に似通ったデータを使う際有用なCurry化ですが、Livescriptでも気軽に使えます。

実際のところ

例1:カンマ区切りCSVっぽい文字列

簡単な例として、カンマ区切りCSVっぽいデータを生成したい場合を考えます。
Curry関数は"-->"と、普段の関数定義よりハイフンを一個多めに書くだけで使えます。

times = (x, y) --> "temp,#x,#y;"
base_A = times "nodeA"
base_B  = times "nodeB"
str = "#{base_A 5}#{base_A 7}#{base_B 10}"

結果は、

temp,nodeA,5;temp,nodeA,7;temp,nodeB,10;

と意図通り楽に出すことができました。

例2:配列の各要素を特定の条件でフィルタリング

数値が入っている配列のうち、負のものは0とする……なんて処理の場合は

func = (x,y) --> Math.max(x,y)
zeroFilter = func 0
brightness = [0.2, -0.3, 1.0, -0.5]
brightness = brightness.map( zeroFilter );
#=> [0.2,0,1,0]

と、mapメソッド中でProcよろしく判定できます。