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

関数から関数リテラルを取得する

関数リテラルはこんな感じで定義できるのは知っていた

scala> (i:Int) => { println(i) }
res1: (Int) => Unit = <function1>

ただ、関数から関数リテラルを取り出すのはどうやってやるのかずっとわからなかった

scala> def d(i:Int) = println(i)
d: (i: Int)Unit
//ここからどうやって(Int) => Unit = <function1>を取得できる?

非公式 sbt 0.10 ガイド v2.0 | eed3si9nを見てわかった
"_"を使うといいらしい

scala> val dd = d _
dd: (Int) => Unit = <function1>

これはググリずらい・・・
もちろん引数をとらない関数も関数リテラル化できる

scala> def a = println("hoge")
a: Unit

scala> val b = a
hoge
b: Unit = ()

scala> val c = a _
c: () => Unit = <function0>

これって常識だったりするのかな・・・


追記
関数リテラルよりは関数オブジェクトの方が正しいかも