在 Dart 中,允许像这样改变方法中的参数值
void changeValue(int num) {
num = 10;
}
我知道上面的代码不会发生错误,但是
num = 10;
无法更改参数的实际值。
(因为 Dart 是“按值传递”)
我的问题是这些..
如果可以并且愿意的话,可以更改函数参数引入的局部变量。
您可以通过将变量设置为final来使其不可能:
void foo(final int value) {
print(value);
value = value + 1; // COMPILATION ERROR: Value is `final`.
}
大多数参数变量可能是最终的,但没有人费心去写
final
,因为没有人分配的可变变量也一样好。
特别是如果没有人考虑分配给他们。
我分配给变量的情况包括:
int foo([int? value]) {
value ??= computeDefault(); // (Cannot be a constant)
// ...
}
T linkValue<T>(Link<T> node) {
while (!node.hasValue) {
node = node.next ?? (throw StateError("No values"));
}
// Do something more.
return node.value;
}
解除递归。如果将尾递归函数转换为循环,
引入一个新变量是浪费空间。
int treeSum(BinNode? node) {
var result = 0;
while (node != null) {
result += treeSum(node.left);
result += node.value;
node = node.right;
}
return result;
}
至少达到变量的所有用途,通常就可以了。如果不是,那么它可能不再是同一个概念变量。