読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

livescriptのCurry化

livescript

中途半端に似通ったデータを使う際有用な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よろしく判定できます。