最终和顶级延迟初始化

JAr*_*Are 6 dart

请帮我理解它的确切含义:

引自"第二章飞镖语言之旅"

声明为final的本地,顶级或类变量在第一次使用时初始化

所以这是我的测试代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

final类变量
local final
lazy initialized

无论finalClassVariablelocalFinal 初始化,并且只globalsAreLazy不是.lazyInitialized按照我的预期在访问时初始化.

lrn*_*lrn 7

类变量是静态字段的另一个名称,因此您需要使其变为finalClassVariable静态以使其变为惰性.

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

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


Gün*_*uer 5

finalClassVariable是实例变量而不是类变量。要使其成为类变量,您必须在前面添加static.