我认为()是Scala中唯一的Unit实例。
当我尝试将函数设置为匿名func变量时,这可以工作:
def some(a:Unit):Unit = {
println("Enigma")
}
val func:Unit => Unit = some
func()
但这不是:
def some():Unit = {
println("Enigma")
}
val func:Unit => Unit = some
答案 0 :(得分:3)
第二个示例中的空参数列表与Unit不同,Unit是表示null的值。 ()并不总是在每个上下文中表示单位, 特别是你处理参数列表的实例。
答案 1 :(得分:1)
这是因为你的第二个例子是一个没有任何参数的方法。
查看结果类型:
some: (a: Unit)Unit
some: ()Unit
将以类型分配写为
Unit => Unit
() => Unit
在第二种情况下,parens不作为Unit,而只是无参数函数的字符串表示。 ()
在方法的上下文中仅作为Unit
符号。在类型签名中,您使用Unit
,因为()
应该是一个没有参数的函数
答案 2 :(得分:1)
def some(): Unit
()
这里不是Unit的实例,只是没有参数。
()
的正常用法是
def some(): Unit = ()
但是如果你在Scala解释器中输入Some()
,你就会得到
scala> Some()
res0: Some[Unit] = Some(())
嗯,很奇怪,似乎Scala将Some()
重写为Some(())
。无论如何,我不会写这样的代码,这让事情很难理解。