Scala 额外括号打印输出
我编写了我的第一个示例 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 。
谢谢,
杰夫
I wrote my first sample scala program and it looks like this:
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
The output is
applying f1
aprintln
()
done applying f1
Can someone explain why the extra () appears? I thought just aprintln would appear.
thanks,
Jeff
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这将解决问题:
这也将解决:
这里发生的事情是您正在执行函数
f1
并调用apply
。函数f1
打印出'aprintln',并返回()
。然后,您将f1
的输出(即()
)传递给另一个对println
的调用。这就是为什么您会在控制台上看到一对额外的 parans。空括号在 Scala 中具有 Unit 类型,相当于 Java 中的 void。
This will fix the problem:
And so will this:
What's going on here is you are executing the function
f1
with the call toapply
. The functionf1
prints out 'aprintln', and returns()
. You then pass the output off1
, which is()
, to another call toprintln
. That's why you see an extra pair of parans on the console.The empty parentheses have the type Unit in Scala, which is equivalent to void in Java.
在 Java 中具有 void 返回类型的方法在 Scala 中具有 Unit 的返回类型。 () 是单位值的书写方式。
在您的代码中,f1 直接调用 println 。因此,当您调用 f1 并将其结果传递给 println 时,您既会在 f1 的主体中打印一个字符串,又会打印其结果,该结果被 tostring'ed 为 ()。
Methods that would have a void return type in Java have a return type of Unit in Scala. () is how you write the value of unit.
In your code, f1 calls println directly. So when you call f1 and pass its result to println, you both print a string in the body of f1, and print its result, which is tostring'ed as ().