我写我的第一个样本斯卡拉程序,它看起来像这样:斯卡拉额外的括号打印
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
输出是
有人能解释为什么这些额外的()出现?我以为只是打印出来。
感谢,
杰夫
我写我的第一个样本斯卡拉程序,它看起来像这样:斯卡拉额外的括号打印
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
输出是
有人能解释为什么这些额外的()出现?我以为只是打印出来。
感谢,
杰夫
这将解决这个问题:
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。
中的方法将有一个void返回类型在Java中有单位在斯卡拉返回类型。 ()是你如何写单位的价值。
在你的代码中,f1直接调用println。所以,当你调用f1并将结果传递给println时,你都会在f1的主体中打印一个字符串,并打印出结果,并将结果作为()调用。
有道理,并与其他答案一致。谢谢。 – 2009-10-05 11:58:05
啊,是的,我很愚蠢。我没有想到,因为Java编译器不会让我这样做。谢谢。 – 2009-10-05 11:57:31