gpt4 book ai didi

scope - 使用 Dart 的 final 关键字确定范围

转载 作者:行者123 更新时间:2023-12-01 08:25:13 25 4
gpt4 key购买 nike

下面的代码可以正常编译和运行:

void testFinal() {
for (var i = 0; i < 10; i++) {
final x = i + 1;
print(x);
}
}

因此看起来每次循环中最终注释都“重新应用”。这似乎与 final 的动机不一致,final 的(我类型推断)是为了让编译器更好地保证某些代码转换。我们是否将循环视为一堆展开的独立作用域?

最佳答案

所有 block 都有自己的范围:

void main() {
if (true)
{
final x = 0;
}
final x = 10; //ok
}

不会工作:

void main() {
final x = 0;
for (var i = 0; i < 10; i++) {
x = i + 1; //NoSuchMethodError: cannot assign to final variable 'x'
print(x);
}
}

但是这个会:

void main() {
final x = 0;
for (var i = 0; i < 10; i++) {
final x = i + 1; //ok again
print(x);
}
}

因为每次迭代你都会说“我想要一个新的最终 x”

它们是 block 级决赛,每次都是新的声明。由于这些是决赛,而不是静态 - 这是预期的行为。至少,它们可以帮助您避免一些错误并提供基本上说:“不会改变”的代码注释。

关于scope - 使用 Dart 的 final 关键字确定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235453/

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