题
我写我的第一个样本斯卡拉程序,它看起来是这样的:
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会出现。
感谢,
杰夫
解决方案
这将解决这个问题:
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中类型单位,这相当于在Java中的孔隙。
其他提示
这将具有在Java中void返回类型
方法具有单位的Scala中的一个返回类型。 ()是如何写单元的值。
在您的代码中,f1的呼叫直接调用println。因此,当调用f1和传递其结果给println,则无论是在f1的主体打印一个字符串,并打印其结果,这是作为tostring'ed()。
不隶属于 StackOverflow