【问题标题】:What is the difference between Any and Unit?Any 和 Unit 有什么区别?
【发布时间】:2019-11-19 02:20:22
【问题描述】:

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

【问题讨论】:

  • 火腿......就像成千上万的人一样。你读过关于Scala Type Hierarchy 的一些基本知识吗? Any 是顶级类型,它是所有其他类型的超类型(意味着所有其他类型都是它的子类型)。而Unit 只是一种特殊类型,只有一个居民() 也称为单位)。用于表示只执行副作用的函数的返回类型,如println。 - 你觉得他们有什么相似之处?

标签: scala


【解决方案1】:

Unit有点像Java的void,除了它有一个实际值(()Unit类型的唯一值)。

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

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

【讨论】:

    【解决方案2】:

    Any表示任意类型的对象,大致相当于C/C++中的void *

    Unit 表示无对象,与 C/C++ 中的void 大致相同。

    【讨论】:

      【解决方案3】:

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

      • 如果我们有一个 Any 类型的值,除非我们在运行时强制转换,否则我们真的不知道它是什么类型的值
      • 如果我们有 Unit 的值,我们就知道执行了副作用,但我们对它的副作用类型知之甚少。

      理想情况下,我们希望尽可能地缩小程序的含义,因此我们尽量减少AnyUnit 的使用,同时最大限度地使用语义更丰富的类型。

      附带说明,Any 是 Scala 类层次结构的根,这意味着即使 UnitAny 的子类型,例如,以下是有效的:val a: Any = ()

      【讨论】:

        猜你喜欢
        • 2017-10-19
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 2022-12-03
        • 1970-01-01
        • 2020-05-10
        相关资源
        最近更新 更多