我写我的第一个样本斯卡拉程序,它看起来是这样的:

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()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top