我的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
,因为它是第一次访问时所做的,而不是在最初加载库时定义的。
答案 0 :(得分:2)
如果您希望每次阅读时都可以调用它,那么您实际上可以使用它来制作吸气剂。
bar
是懒惰评估的(首次访问时)。
据我所知,无法在库加载时执行代码。您必须从main()
(或当然称为表单main()
的方法)调用它。