Где в исходном коде Dart определен ноль - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь понять, как null работает в Dart. В рамках этого исследования я смотрю, как нуль реализован в исходном коде. Я нашел null.dart в исходном коде здесь :

/**
 * The reserved word [:null:] denotes an object that is the sole instance of 
 * this class.
 * 
 * It is a compile-time error for a class to attempt to extend or implement
 * Null.
 */
@pragma("vm:entry-point")
class Null {
  factory Null._uninstantiable() {
    throw UnsupportedError('class Null cannot be instantiated');
  }

  external int get hashCode;

  /** Returns the string `"null"`. */
  String toString() => "null";
}

Но я не вижу, где определен null. Где это найдено?

1 Ответ

4 голосов
/ 04 февраля 2020

Выражение null определено в грамматике спецификации языка.

Поскольку null является зарезервированным словом (например, if, while и this), оно не является название любой декларации. Это просто выражение атоми c (например, this), которое оценивается как «нулевое значение», которое определяется как единственное значение, реализующее класс Null.

Реализации языка может реализовать это так, как они хотят. Компилятор Dart2 JS использует оба значения null и undefined из JavaScript в качестве нулевых значений Dart. Виртуальная машина имеет специальный объект с нулевым значением, который она создает в памяти при запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...