Почему `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'.)