Dart 抽象原语实现
Dart abstract primitives implementation
我正在查看基本 dart 类型(double、int、String 等)的实现,我发现其中许多 class 是 abstract
。我想知道如果这些 classes 是 abstract
那么哪个 class 实现了它们?当这些 class 甚至无法实例化时,如何将对象分配给特定类型?例如,
double
是一个 abstract
class 我不能像
那样实例化它
var d = double();
但是那又如何呢
var d = 2.5;
print(d is double);
打印 true
? dart 如何知道 d
是 double
的对象?
Dart 平台库分为 public 您正在查看的共享代码和内部 platform-dependent 代码(“补丁文件”),后者为已声明的函数提供实现external
,并且还提供平台所依赖的其他内部机制(然后还有 run-time 系统的原生内容)。
那些特定于平台的文件包含 类 的声明,这些声明实现了 int
和 String
等类型。规范说你不能子类化 int
和 String
,但运行时系统无论如何都会这样做。您的“原始”对象是那些隐藏的 sub-classes 抽象接口的实例。
run-time 系统可以(并且确实)进一步优化其中一些 类 的 表示 。例如,VM 有一个名为 Smi
(“小整数”)的 int
子类型,它将值存储在指针中而不是在堆中分配对象,而 Web 平台实现 int
作为一个普通的 JavaScript 数字。当您调用它们的方法时,它们必须特殊对待这些值,因为它们的结构与其他对象不同。但这是一种优化,您可以认为这些值只是由内部隐藏 类.
实现的
我正在查看基本 dart 类型(double、int、String 等)的实现,我发现其中许多 class 是 abstract
。我想知道如果这些 classes 是 abstract
那么哪个 class 实现了它们?当这些 class 甚至无法实例化时,如何将对象分配给特定类型?例如,
double
是一个 abstract
class 我不能像
var d = double();
但是那又如何呢
var d = 2.5;
print(d is double);
打印 true
? dart 如何知道 d
是 double
的对象?
Dart 平台库分为 public 您正在查看的共享代码和内部 platform-dependent 代码(“补丁文件”),后者为已声明的函数提供实现external
,并且还提供平台所依赖的其他内部机制(然后还有 run-time 系统的原生内容)。
那些特定于平台的文件包含 类 的声明,这些声明实现了 int
和 String
等类型。规范说你不能子类化 int
和 String
,但运行时系统无论如何都会这样做。您的“原始”对象是那些隐藏的 sub-classes 抽象接口的实例。
run-time 系统可以(并且确实)进一步优化其中一些 类 的 表示 。例如,VM 有一个名为 Smi
(“小整数”)的 int
子类型,它将值存储在指针中而不是在堆中分配对象,而 Web 平台实现 int
作为一个普通的 JavaScript 数字。当您调用它们的方法时,它们必须特殊对待这些值,因为它们的结构与其他对象不同。但这是一种优化,您可以认为这些值只是由内部隐藏 类.