dart,是否可以在库加载时执行代码?

时间:2014-10-24 11:25:26

标签: dart

我的lib / sndbx.dart文件中有一个库:

library sndbx;

bool foo(){
  print('hey hey!');
  return true;
}

bool bar = foo();

我的bin / sndbx_cmd.dart中有一个main:

import 'package:sndbx_cmd/sndbx.dart';

void main() {
  print("Hello, World!");
}

但是我没有看到"嘿嘿!"打印到命令行,为什么加载库时它没有定义顶级bool变量bar

我看到如果我得到bar值:

import 'package:sndbx_cmd/sndbx.dart';

void main() {
  print("Hello, World!");
  print(bar);
  print(bar);
}

我明白了:

Hello World!
hey hey!
true
true

那为什么一次只调用foo?如果我将其更改为:

library sndbx;

bool called = false;

bool foo(){
  print('hey hey!');
  return called = !called;
}

bool bar = foo(); 

因为bar没有在项目加载中定义,所以它感觉它像一个getter但它只在第一次调用时得到值,并且在我可能期望它之后将值缓存在那里每次访问时都会一直调用foo,因为它是第一次访问时所做的,而不是在最初加载库时定义的。

1 个答案:

答案 0 :(得分:2)

如果您希望每次阅读时都可以调用它,那么您实际上可以使用它来制作吸气剂。

bar是懒惰评估的(首次访问时)。

据我所知,无法在库加载时执行代码。您必须从main()(或当然称为表单main()的方法)调用它。