得到了一些例子。
void main() {
A a = A();
transform(a);
print(a.str + ' sync');
}
Future<void> transform(A a) async {
await Future.delayed(Duration(seconds: 3), () => a.str = 'B');
print(a.str + ' async');
}
class A {
String str = 'A';
}
输出:
A sync
B async
下一个例子
void main() {
A a = A();
transform(a);
print(a.str + ' sync');
}
Future<void> transform(A a) async {
Function f = () {
a.str = 'B';
};
await Future.delayed(Duration(seconds: 3), f());
print(a.str + ' async');
}
class A {
String str = 'A';
}
带输出:
B sync
B async
我认为f((在第二种情况下被执行但没有返回,所以我对.str值进行了类似的修改,稍后返回,这是对的吗?或者正确的答案是什么?
在第二个示例中,您有以下行:
await Future.delayed(Duration(seconds: 3), f());
这里要做的是执行变量f
所指向的函数,并使用此方法的结果作为Future.delaye
的第二个参数。原因是在变量f
的名称后面有()
,用于表示要在没有任何参数的情况下执行f
指向的方法。
您应该做的是(如果您想将函数本身作为Future.delayed
的第二个参数发送(只需使用f
:
await Future.delayed(Duration(seconds: 3), f);
await Future.delayed(Duration(seconds: 3),(){f();});
这是我想要的