为什么我不应该不使用单位代替单位

时间:2019-04-23 17:05:54

标签: scala

我正在查看Scala的层次结构,然后单击此按钮。

如果我将None声明为Option[Unit],将Nil声明为List[Unit],该怎么办

Unit和Nothing到底有什么区别?

如果我什么也没用代替单位会发生什么?

谢谢

2 个答案:

答案 0 :(得分:7)

一个区别是Unit类型只有一个值(()),而Nothing没有任何值。因此,您无法从Nothing返回方法中返回任何内容,这意味着所有具有返回类型Nothing的合法方法必须永远循环,抛出异常或否则永远无法到达函数的常规结尾。

另一个区别是Nothing是每种类型的子类型,而Unit不是每种类型的子类型。

  

如果我像Option [Unit]一样声明None,而像List [Unit]一样声明Nil,怎么办

然后,在创建Unit以外的任何类型的列表或选项时,您将无法使用这些值。

  

如果我什么也没用代替单位会发生什么?

您的代码将不再编译,因为您的方法将尝试返回错误的类型。

答案 1 :(得分:2)

没有类型为Nothing的元素。

只有Unit类型的元素,即()

Nothing是任何类型的子类型。任何类型的值都可以转换为Unit类型。