Сравнение типов среды выполнения Dart с ключевым словом 'is' - PullRequest
0 голосов
/ 26 мая 2020

Я знаю, что ключевое слово is можно использовать для проверки типа экземпляра. Но когда я пробую использовать переменную Type вместо прямого использования типа с is, например,

final Type myType = String;
print('MyString' is myType); //ERROR

, возникает следующая ошибка:

Имя 'myType' не является типом и не может использоваться в выражении 'is' - строка 2

Но если я использую runtimeType и ==, как это, он отлично работает .

final Type myType = String;
print('MyString'.runtimeType == myType); //TRUE

Не могли бы вы объяснить причину такого поведения?

1 Ответ

0 голосов
/ 26 мая 2020

Согласно комментарию @ julemand101, в официальном репозитории dart есть проблема github. По-видимому, реализация сравнения типов среды выполнения с is приводит к значительной стоимости размера кода .

В общем, единственный аргумент против этого основан на предполагаемом влиянии размера кода, потому что компилятор теряет хороший способ оценить, какие проверки типа могут происходить в программе - и, следовательно, больше не может отбрасывать некоторые метаданные, связанные с иерархией классов. @rakudrama провела эксперимент для dart2 js, чтобы оценить приблизительное влияние, и обнаружила некоторые немалые затраты с точки зрения размера кода.

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