为什么`final var`在Dart中是非法的?

Sun*_*Lim 3 dart dart2js

分析仪不说final var是非法的.但是dart2js说final var是非法的

什么是正确的?为什么?

Gün*_*uer 5

这可能是分析仪中的一个错误.final并且var是互斥的.

允许以下之一

  • 最终标识符
  • 最终类型标识符
  • const标识符
  • const类型标识符
  • var标识符
  • 类型标识符

Dart编程语言规范(1.2) - 变量

finalConstVarOrType:
   final type?
   | const type?
   | varOrType
   ;
varOrType:
   var
   | type
   ;
Run Code Online (Sandbox Code Playgroud)

编辑

关于"linux_x64"的我的DartEditor(Dart VM版本:1.3.0-dev.3.2(2014年3月10日10:15:05))显示错误final var xxx(不能将成员声明为'final'和'var' .)


mez*_*oni 5

该关键字var表示具有显式dynamic类型说明符的可变变量。显式类型说明符意味着不可能在声明中指定其他类型。

关键字final表示val未指定类型的不可变变量,具有隐式dynamic类型。隐式类型说明符意味着可以在声明中指定其他类型。

更准确地说,变量声明为val和。valuevariable

它是可变的,因为具有runtime storage.

但它也immutable value只能从关联的存储中检索一次,并且可以在任何地方使用。

现在考虑以下代码:

final var foo;
Run Code Online (Sandbox Code Playgroud)

这与下面的伪代码相同:

immutable mutable dynamic foo;
Run Code Online (Sandbox Code Playgroud)

当然,这是行不通的。