Any和Unit有什么区别?

时间:2019-07-09 13:44:41

标签: scala

Scala中的AnyUnit有什么区别? 我知道两者都是数据类型,但是有什么区别?

3 个答案:

答案 0 :(得分:3)

Unit类似于Java的void,但它具有实际值(()是类型Unit的唯一值)。

Any是所有其他类型的父类型。 ()Any的实例。 1Any的实例。 "Hello"Any的实例。

Any有两个直接子类型; AnyVal(包括Java将视为“原语”的类型,例如IntBoolean)和AnyRef(例如java.lang.Object)。

答案 1 :(得分:2)

Any代表任何类型的对象,与C / C ++中的void *大致相同。

Unit代表没有对象,与C / C ++中的void大致相同。

答案 2 :(得分:1)

在以下意义上都没有太多的语义含义:

  • 如果我们有一个类型为Any的值,除非我们在运行时进行强制转换,否则我们真的不知道它是什么类型的值
  • 如果我们的值为Unit,我们知道已经执行了副作用,但是我们对它的副作用种类并不十分了解。

理想情况下,我们希望尽可能缩小程序的含义,因此,我们尝试使AnyUnit的使用最小化,同时使语义上更丰富的类型的使用最大化。

作为旁注,Any是Scala类层次结构的根,这意味着Unit也是Any的子类型,例如,以下内容有效:{ {1}}。