转换方法到功能?

时间:2013-03-16 17:07:15

标签: scala

1)这个建筑怎么称呼?不能谷歌吧。

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

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

object Main {

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

}

1 个答案:

答案 0 :(得分: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()