Scala额外的括号打印输出

时间:2009-10-05 03:02:56

标签: scala function println

我写了第一个示例scala程序,它看起来像这样:

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

输出

applying f1
aprintln
()
done applying f1

有人能解释为什么会出现额外的()吗?我以为只会出现aprintln。

感谢,

杰夫

2 个答案:

答案 0 :(得分:4)

这将解决问题:

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的另一个调用。这就是为什么你在控制台上看到一对额外的副枪。

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

答案 1 :(得分:2)

在Java中具有void返回类型的方法在Scala中具有返回类型Unit。 ()是你如何写出单位的价值。

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