2012年9月10日月曜日

Scalaのカリー化とか部分適応とかの俺メモ

別になんにも難しい or 怖いお話はありません

// 全部問題ない
def hoge(x:Int, y:Int, f:(Int, Int) => Int) = f(x,y)
// hogeをカリー化
val fuga = hoge _ curried
// hogeを部分適応
val piyo = hoge(3, _:Int, _:(Int, Int) => Int)
// 更に部分適応
val moo = piyo(2, _:(Int, Int) => Int)
def mew(x:Int)(y:Int)(f:(Int, Int) => Int) = f(x,y)
// mewを部分適応
val bow = mew(3)_
view raw memo1.scala hosted with ❤ by GitHub


上記は問題ない。
全く問題ない。

問題は下

/**
* fugaもpiyoもすでに「関数オブジェクト」となっているので
* メソッド _ で関数オブジェクト化してはならない、というか出来ない
**/
// fugaを部分適応
// NG
//val fugafuga = fuga(3)_
// OK
val fugafuga = fuga(3)
// piyoをカリー化
// NG
//val piyopiyo = piyo _ curried
// OK
val piyopiyo = piyo curried
view raw memo2.scala hosted with ❤ by GitHub


一旦部分適応やらで作成したメソッドを再度カリー化したり
一旦カリー化されたメソッドを更に部分適応したりするときは _ が不要
というかつけると怒られる

とりあえずはそういうものって覚えればいい?

環境は
Scala2.9.2
MacOSX10.7


2012/09/12 追記
defで宣言した関数名の後ろに「_」をつけると、「関数オブジェクト」になる
なので、一回関数オブジェクトに変わっている → 次は変える必要はない(というか既に変換済み)
ということでいいんでしょうか?


2012/09/13 追記
http://togetter.com/li/154007
このあたりかな?

2012年9月6日木曜日

Intellij Idea で eclipse の saveアクション的なことをする

参考URLというか答え
http://stackoverflow.com/questions/946993/intellij-reformat-on-file-save

マクロにやりたい処理を追加して、そのマクロにショートカットキーを割り当てるだけ

saveアクション的なことをするためには、
Command+sに保存処理を含んだマクロを割り当てればまさにそれっぽい


でもこれVimPlugin使っている俺はどうやって割り当てればいいんだろうねぇ…
(とりあえずCommand+sに割り当てたけど…)

マクロの存在に気がつけたのでまあいいやw