Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala &引用;没有任何东西是其他所有类的子类;,如何理解它?_Scala - Fatal编程技术网

Scala &引用;没有任何东西是其他所有类的子类;,如何理解它?

Scala &引用;没有任何东西是其他所有类的子类;,如何理解它?,scala,Scala,这些天,我在读《scala编程》一书。书中第246页第11章第一段有一句话: 例如,正如Any是其他所有类的超类一样,没有任何内容 是其他所有类的子类 我理解第一部分,因为每个类都以直接或间接的方式继承任何类。但是我不能理解句子的后半部分 这是类的定义: abstract final class Nothing extends Any 从概念上讲,Nothing比Any更难理解,这是我们从Java和大多数其他面向对象编程中熟悉的没有任何东西是Scalas。维基百科的定义是: 在子类型系统中,底

这些天,我在读《scala编程》一书。书中第246页第11章第一段有一句话:

例如,正如Any是其他所有类的超类一样,没有任何内容 是其他所有类的子类

我理解第一部分,因为每个类都以直接或间接的方式继承任何类。但是我不能理解句子的后半部分

这是类的定义:

abstract final class Nothing extends Any

从概念上讲,
Nothing
Any
更难理解,这是我们从Java和大多数其他面向对象编程中熟悉的<代码>没有任何东西是Scalas。维基百科的定义是:

在子类型系统中,底部类型是所有类型的子类型。 (然而,相反的情况并非如此——并非所有类型的子类型都是如此。) 必须是底部类型。)用于表示返回类型 指不返回值的函数:例如 永远循环、发出异常信号或退出

我认为对它进行推理的最简单的方法就是把它看作是一种描述永远不会回来的东西的方式。您不能自己构造
Nothing
类型的实例。在Scala中,
Nothing
的一个特殊用途是能够对协变参数类型进行推理:

在Scala中,底部类型表示为
Nothing
。除了用于 只抛出异常或不返回异常的函数 通常,它也用于协变参数化类型。对于 例如,Scala的
列表是一个协变类型构造函数,所以
List[Nothing]
是所有类型a的
List[a]
的子类型。因此Scala的
Nil
, 用于标记任何类型列表结尾的对象属于 键入
列表[无]


作为的子类型与作为的子类不同。发件人:

子类型不应与(类或对象)的概念混淆 从面向对象语言继承;子类型是一种关系 类型之间(面向对象术语中的接口) 继承是源于 允许从现有对象创建新对象的语言功能 一个。在许多面向对象的语言中,子类型被称为 接口继承


这也在(一致性)中表示为
@Rahul的一部分,我不认为这是重复的。他问的不是多重继承,他问的是理解什么是
Nothing
Nothing
是其他所有类型的子类型。类型!=班级。