2014-05-07 117 views
3

请帮我明白它的确切含义是:从"Chapter 2. A Tour of the Dart Language"决赛和顶级延迟初始化

报价局部,顶层,或类变量声明为作为最终初始化它的使用

第一次所以这是我的测试代码:

lazyTest(msg) => print(msg); 

class Printer{ 
    Printer(msg){ 
    print(msg); 
    } 
    final finalClassVariable = lazyTest("final class variable"); 
} 

var globalsAreLazy = lazyTest("top-level"); 
var lazyInitialized = lazyTest("lazy initialized"); 

void main() { 

    final localFinal = new Printer("local final"); 
    var initialize = lazyInitialized; 
} 

输出:

final类变量
本地最终
延迟初始化

两个finalClassVariablelocalFinal初始化,并且只有globalsAreLazy不是。按照我的预期,lazyInitialized被初始化。

回答

4

类变量是静态字段的另一个名称,因此您需要使finalClassVariable为静态,因为它是懒惰的。

本地变量上的文本不正确。它们在声明执行时被初始化,而不是在第一次被读取时懒惰地被初始化。

具有初始化表达式的非静态类字段在调用构造函数时被初始化。他们不懒惰。

+0

我提交http://dartbug.com/18671以更改“局部变量”文本。 – lrn

3

finalClassVariable是一个实例变量而不是类变量。为了使它成为一个类变量,你必须预先static

+1

明白了。但为什么局部变量“localFinal”已初始化? – JAre

+1

我也想知道,但我还没有想法。 –