Scala附加括号打印输出

Scala附加括号打印输出,scala,function,println,Scala,Function,Println,我编写了第一个示例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 有人能解释为什么会出现额外的()吗?我以为只

我编写了第一个示例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会出现

谢谢


Jeff

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


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

在Java中为void返回类型的方法在Scala中为Unit返回类型。()是如何写出单位的值


在代码中,f1直接调用println。因此,当您调用f1并将其结果传递给println时,您可以在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
的调用。这就是为什么你会在控制台上看到一对额外的Paran


空括号在Scala中具有类型单位,这相当于Java中的void。

这将解决问题:

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
的调用。这就是为什么你会在控制台上看到一对额外的Paran


空括号中的类型单位在Scala中,相当于Java中的void。

啊,是的,我真傻。我没有想到这一点,因为Java编译器不允许我这么做。谢谢。啊,是的,我真傻。我没有想到这一点,因为Java编译器不允许我这么做。谢谢。这是有道理的,并且与另一个答案是一致的。谢谢。这是有道理的,并且与另一个答案是一致的。非常感谢。