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意味着存在副作用.