Почему `final var` недопустим в Dart?

Анализатор не говорит final var незаконно но dart2js говорит final var незаконно

Что правильно? Зачем?

2 ответа

Решение

Ключевое слово var означает переменную с явным dynamic спецификатор типа. Явный спецификатор типа означает, что невозможно указать другой тип в объявлении.

Ключевое слово final средства val или неизменяемая переменная с неопределенным типом, с неявным dynamic тип. Неявный спецификатор типа означает, что это возможно, чтобы указать другой тип в объявлении.

Точнее переменная, объявленная как val являются value а также variable однажды.

Это переменная, потому что имеет runtime storage,

Но это также immutable value это может быть извлечено из связанного хранилища только один раз и может использоваться где угодно.

Теперь рассмотрим следующий код:

final var foo;

Это так же, как следующий псевдокод:

immutable mutable dynamic foo;

Конечно, это не будет работать.

Это, вероятно, ошибка в анализаторе. final а также var являются взаимоисключающими.

Разрешено одно из следующего

  • окончательный идентификатор
  • окончательный идентификатор типа
  • константный идентификатор
  • идентификатор типа const
  • идентификатор вар
  • идентификатор типа

Спецификация языка программирования дротиков (1.2) - переменные

finalConstVarOrType:
   final type?
   | const type?
   | varOrType
   ;
varOrType:
   var
   | type
   ;

РЕДАКТИРОВАТЬ

Мой DartEditor (версия Dart VM: 1.3.0-dev.3.2 (понедельник, 10 марта 10:15:05 2014) в "linux_x64") показывает ошибку для final var xxx (Члены не могут быть объявлены как 'final' и 'var'.)

Другие вопросы по тегам