如何设置函数参数中使用的全局变量的值

时间:2014-08-27 21:06:58

标签: dart

我可以直接从函数内部更改opsCount变量, 因为只有一种变量。

int opsCount  = 0;      
int jobXCount = 0;       
int jobYCount = 0;
int jobZCount = 0;

void doStats(var jobCount) {
  opsCount++;      
  jobCount++;   
}   

main() {
  doStats(jobXCount);    
}

但是有很多jobCount变量,所以当调用函数时,如何有效地改变参数中使用的变量?

2 个答案:

答案 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++;
}