Scala 额外括号打印输出

发布于 2024-08-06 10:09:48 字数 370 浏览 10 评论 0原文

我编写了我的第一个示例 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淤浪 2024-08-13 10:09:48

这将解决问题:

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。

This will fix the problem:

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

And so will this:

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

What's going on here is you are executing the function f1 with the call to apply. The function f1 prints out 'aprintln', and returns (). You then pass the output of f1, which is (), to another call to println. 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.

晒暮凉 2024-08-13 10:09:48

在 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 ().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文