gpt4 book ai didi

Dart:闭包研究

转载 作者:行者123 更新时间:2023-12-04 19:32:10 27 4
gpt4 key购买 nike

这段代码没有实际意义。我刚刚习惯了闭包的想法。

var cls = () {
var x = 5;
return {
'x': x,
'inc': () {x++;},
};
} ();

void main() {
print(cls['x']);
print(cls['inc']);
cls['inc']();
print(cls['x']);
}

DartPad 输出:

5
Closure '_closure'
5
Error compiling to JavaScript:
main.dart:18:13:
Error: The method 'call' isn't defined for the class 'dart.core::Object'.

期望的输出应该是这样的

5
6

这种练习最干净的方法是什么?

更新:

工作示例,由 Günter Zöchbauer 提供:

var cls = () {
var x = 5;
var map = <String, dynamic>{
'x': x,
};
map['inc'] = () {map['x']++;};
return map;
} ();

void main() {
print(cls['x']);
print(cls['inc']);
cls['inc']();
print(cls['x']);
}

DartPad 输出:

5
Closure '_closure'
6

最佳答案

您必须将“x”条目声明为函数。

在您的代码中,您在返回 map 时将“x”设置为“x”变量 (5) 的值。该值将始终为 5,并且不会更新。

var cls = () {
var x = 5;
return {
'x': () => x,
'inc': () {x++;},
};
}();

void main() {
print(cls['x']()); // 5
print(cls['x']); // Closure: () => int
print(cls['inc']); // Closure: () => Null
cls['inc']();
print(cls['x']()); // 6
}

关于Dart:闭包研究,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51595409/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com