2009-10-05 75 views
2

我写我的第一个样本斯卡拉程序,它看起来像这样:斯卡拉额外的括号打印

def main(args: Array[String]) {  
    def f1 = println("aprintln") 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
} 

输出是

​​

有人能解释为什么这些额外的()出现?我以为只是打印出来。

感谢,

杰夫

回答

5

这将解决这个问题:

def main(args: Array[String]) {   
    def f1 = println("aprintln") 
    println("applying f1") 
    (f1 _).apply 
    println("done applying f1") 
}

,因此将这样的:

def main(args: Array[String]) {   
    def f1 = "aprintln" 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
}

这是怎么回事这里是您正在执行的功能f1与调用apply。功能f1打印出'aprintln',并返回()。然后您将f1的输出()传递给另一个呼叫println。这就是为什么你在控制台上看到一对额外的parans。

空括号在Scala中的类型为Unit,这相当于Java中的void。

+0

啊,是的,我很愚蠢。我没有想到,因为Java编译器不会让我这样做。谢谢。 – 2009-10-05 11:57:31

2

中的方法将有一个void返回类型在Java中有单位在斯卡拉返回类型。 ()是你如何写单位的价值。

在你的代码中,f1直接调用println。所以,当你调用f1并将结果传递给println时,你都会在f1的主体中打印一个字符串,并打印出结果,并将结果作为()调用。

+0

有道理,并与其他答案一致。谢谢。 – 2009-10-05 11:58:05