1

我编写了我的第一个示例 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。

谢谢,

杰夫

4

2 回答 2

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。

于 2009-10-05T03:10:12.730 回答
2

在 Java 中具有 void 返回类型的方法在 Scala 中具有 Unit 的返回类型。() 是你写单位值的方式。

在您的代码中, f1 直接调用 println 。因此,当您调用 f1 并将其结果传递给 println 时,您既可以在 f1 的主体中打印一个字符串,也可以打印其结果,该结果被字符串化为 ()。

于 2009-10-05T03:09:07.163 回答