1)この構造はどのように呼ばれますか?グーグルできません。
2)なぜそれが機能しないのですか?メッセージが印刷されることを期待しています。
class A {
def m() {
println("m()")
}
}
object Main {
def main(args: Array[String]) {
val fun = (_: A).m _
fun(new A())
}
}
1)この構造はどのように呼ばれますか?グーグルできません。
2)なぜそれが機能しないのですか?メッセージが印刷されることを期待しています。
class A {
def m() {
println("m()")
}
}
object Main {
def main(args: Array[String]) {
val fun = (_: A).m _
fun(new A())
}
}
om-nom-nom が言うように、メソッドを関数に変換することを「部分適用」と呼びます。アンダースコアをメソッドの「引数」として使用して明示的に表現するか、関数が必要な場所で使用されるメソッド名が部分的に使用できると推測するのに十分な型情報が利用可能な場合、コンパイラによって自動的に表現できます。必要な機能を生成するために適用されます。
さて、あなたのコードのために。書かれているように、呼び出しの結果fun(new A())
はFunction1[Unit, Unit]
. 呼び出されapply
たものを取得するには、その関数が必要ですprintln
// Exiting paste mode, now interpreting.
defined class A
defined module Main
scala> Main.main(Array())
scala> def doIt { val fun = (_: A).m _; fun(new A())() }
doIt: Unit
scala> doIt
m()