我可以直接从函数内部更改opsCount
变量,
因为只有一种变量。
int opsCount = 0;
int jobXCount = 0;
int jobYCount = 0;
int jobZCount = 0;
void doStats(var jobCount) {
opsCount++;
jobCount++;
}
main() {
doStats(jobXCount);
}
但是有很多jobCount变量,所以当调用函数时,如何有效地改变参数中使用的变量?
答案 0 :(得分:1)
我想我知道你在问什么。不幸的是,答案是"你不能这样做,除非你愿意包裹你的整数"。数字是不可变的对象,你不能改变它们的价值。尽管Dart的数字是对象,并且它们是通过引用传递的,但它们的内在价值却无法改变。
另见Is there a way to pass a primitive parameter by reference in Dart?
答案 1 :(得分:0)
您可以包装变量,然后可以将它们作为参考传递:
class IntRef {
IntRef(this.val);
int val;
@override
String toString() => val.toString();
}
IntRef opsCount = new IntRef(0);
IntRef jobXCount = new IntRef(0);
IntRef jobYCount = new IntRef(0);
IntRef jobZCount = new IntRef(0);
void doStats(var jobCount) {
opsCount.val++;
jobCount.val++;
}
main() {
doStats(jobXCount);
print('opsCount: $opsCount; jobXCount: $jobXCount; jobYCount: $jobYCount; jobZCount: $jobZCount');
}
根据罗伯茨的评论..
使用自定义运算符,它看起来像:
class IntRef {
IntRef(this.val);
int val;
@override
String toString() => val.toString();
operator +(int other) {
val += other;
return this;
}
}
void doStats(var jobCount) {
opsCount++;
jobCount++;
}