我写了第一个示例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。
感谢,
杰夫
答案 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的主体中打印一个字符串,然后打印出它的结果,这个结果被串起来作为()。