Unit和()有什么区别?

时间:2015-02-27 05:22:25

标签: scala

我认为()是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

3 个答案:

答案 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(())。无论如何,我不会写这样的代码,这让事情很难理解。