我正在查看Scala的层次结构,然后单击此按钮。
如果我将None
声明为Option[Unit]
,将Nil
声明为List[Unit]
,该怎么办
Unit和Nothing到底有什么区别?
如果我什么也没用代替单位会发生什么?
谢谢
答案 0 :(得分:7)
一个区别是Unit
类型只有一个值(()
),而Nothing
没有任何值。因此,您无法从Nothing
返回方法中返回任何内容,这意味着所有具有返回类型Nothing
的合法方法必须永远循环,抛出异常或否则永远无法到达函数的常规结尾。
另一个区别是Nothing
是每种类型的子类型,而Unit
不是每种类型的子类型。
如果我像Option [Unit]一样声明None,而像List [Unit]一样声明Nil,怎么办
然后,在创建Unit
以外的任何类型的列表或选项时,您将无法使用这些值。
如果我什么也没用代替单位会发生什么?
您的代码将不再编译,因为您的方法将尝试返回错误的类型。
答案 1 :(得分:2)
没有类型为Nothing
的元素。
只有Unit
类型的元素,即()
。
Nothing
是任何类型的子类型。任何类型的值都可以转换为Unit
类型。