Pet*_*lák 77
Unit
是一个只有一个值的类型 - 请参阅单位类型.在另一方面,Nothing
有没有可能值-见底部类型.
不返回任何内容的函数必须具有返回类型Unit
.如果是,Nothing
则函数无法返回结果.退出函数的唯一方法是异常.
Nothing
以不同的方式使用.它的特点是两个属性:
Nothing
是每种其他类型(包括Null
)的子类型.什么时候有用?考虑None
:
object None extends Option[Nothing]
Run Code Online (Sandbox Code Playgroud)
因为Option
它的类型参数是协变的并且Nothing
是所有东西Option[Nothing]
的子类型,所以Option[A]
是每种类型的子类型A
.因此,我们可以创建一个对象None
,它是Option[A]
每个对象的子类型A
.这是合理的,因为Nothing
无法实例化,所以Option[Nothing]
总是没有值.同样
object Nil extends List[Nothing]
Run Code Online (Sandbox Code Playgroud)
Unit
对应于逻辑真,并且Nothing
对应于Curry-Howard同构下的逻辑假,其中我们将类型视为命题和函数作为证明,.
scr*_*tin 22
Unit
意味着(a)功能具有输入和输出等副作用,(b)这些副作用是该功能的主要目标.当然,即使它的类型不同,功能也可能有副作用Unit
.
Nothing
是Scala中的一种特殊类型,因为(a)它没有值(Unit只有一个值 - ()
),所以你不能返回类型的值Nothing
和(b)它是每个其他类型的子类型.这意味着,如果某些东西有类型Nothing
,它可以在需要其他类型的每个地方使用,但它不会产生任何结果.这用于处理异常 - throw
表达式有一种类型Nothing
,因此它基本上可以在程序的任何地方使用.
简单地说,Nothing
意味着存在错误并且没有返回任何内容,同时Unit
意味着存在副作用.