1

1) 这种结构叫什么名字?不能谷歌它。

2)为什么它不起作用?我希望打印消息。

class A {
  def m() {
    println("m()")
  }
}

object Main {

  def main(args: Array[String]) {
    val fun = (_: A).m _
    fun(new A())
  }

}
4

1 回答 1

1

正如 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()
于 2013-03-16T17:41:01.330 回答