Nothing,Null, Unit in Scala
Contents
Nothing,Null, Unit in Scala
Nothing
Nothing
在Scala中是所有类型的子类,处于类型系统的底部(botoom type),表示没有任何值的类型,也被称为zero or empty type,常用数学符号⊥来表示。如果一个函数的返回值是Nothing,表示函数不会返回。如:函数抛出异常、进入死循环或者退出程序。
|
|
Unit
Unit
类似于别的语言中的void
。如果一个函数返回Unit
,表示它不返回有意义的值,这种函数也被称为过程(procedure)。Unit
也可以作为函数的参数,表示不接收任何有意义的参数。与Nothing
的区别在于,它不会是所有类型的子类,并且它是有值的,在Scala中写作()
。
|
|
Null
Null
有且仅有一个值null
,它是所有引用类型(reference class)的子类。表示空引用。可以将Null
值转换为任何引用类型值。但是不能将Nothing
值转为任何类型值,因为Nothing
没有值,这是他们之间最根本的区别——程序无法得到一个Nothing的值。在Scala中已经尽量避免使用null
,提倡使用Option
/Some
/None
替代。
在Scala类型系统中,Any
是任何类型的父类(包括值类型),Nothing
是任何类型的子类(同样包括值类型),这样便将值类型和引用类型统一起来。任何一个类型都在Any
和Nothing
之间。这是比Java更加一致的地方。
在Scala中还有几个有意思的类:
object Nil extends List[Nothing]
代表一个空List,单例实现,由于Scala中List是协变的,它是任何List[T]
的子类。object None extends Option[Nothing]
代表没有值,与Some
相对。
Author zoro.wang
LastMod 2016-10-03