【发布时间】:2014-04-17 15:54:37
【问题描述】:
分析器没有说final var 是非法的。
但是 dart2js 说 final var 是非法的
什么是正确的?为什么?
【问题讨论】:
分析器没有说final var 是非法的。
但是 dart2js 说 final var 是非法的
什么是正确的?为什么?
【问题讨论】:
这可能是分析器中的一个错误。 final 和 var 是互斥的。
允许以下之一
Dart Programming Language Specification (1.2) - Variables
finalConstVarOrType:
final type?
| const type?
| varOrType
;
varOrType:
var
| type
;
编辑
我的 DartEditor(Dart VM 版本:1.3.0-dev.3.2(2014 年 3 月 10 日星期一 10:15:05)在“linux_x64”上显示final var xxx 的错误(不能将成员声明为两者) final' 和 'var'。)
【讨论】:
var。也许,类型在编译时不固定?
var 指定该字段允许任何类型,但如果该字段是 final 它只能有一种类型 - 它被初始化的值的类型,因此这两个关键字冲突彼此(只是我的看法,我对所发生的决策过程没有特别的见解)
var 表示可变变量。关键字final 表示val,不可变变量,或者只是一个不是const 值但它也不是可变的值。不是const,因为它有runtime storage,但同时这只是一个存储的不可变value。现在考虑这段代码:final var foo 这与val var foo 相同。如您所见,这是不可能立即将变量声明为可变和不可变的。
关键字var 表示具有显式dynamic 类型说明符的可变变量。
显式类型说明符意味着这不可能在声明中指定另一种类型。
关键字final 表示val 或具有未指定类型的不可变变量,具有隐式dynamic 类型。
隐式类型说明符意味着可以在声明中指定其他类型。
更准确地说,声明为val 的变量是value 和variable。
它是可变的,因为有runtime storage。
但它也是immutable value,可以从关联存储中检索一次,并且可以在任何地方使用。
现在考虑以下代码:
final var foo;
这与下面的伪代码相同:
immutable mutable dynamic foo;
当然,这是行不通的。
【讨论】: