2013-03-16 74 views
1

1)这种结构如何被称为?不能谷歌它。将方法转换为函数?

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

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

object Main { 

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

} 
+2

这就是所谓的*部分应用功能*,请参见http://blog.sanaulla.info/2010/12/25/partially-applied -functions功能于斯卡拉/详细信息 – 2013-03-16 17:09:23

+0

这对我来说是新的:'(_:A).m' – sourcedelica 2013-03-18 14:14:38

+0

'(_:A).m'是'A => Unit'和'(_:A) .m _'是'A =>(()=> Unit)' – sourcedelica 2013-03-18 14:17:52

回答

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()