【问题标题】:How to set values of global variables used in function parameters如何设置函数参数中使用的全局变量的值
【发布时间】:2014-08-27 21:06:57
【问题描述】:

我可以直接从函数内部方便地更改opsCount 变量, 因为只有一种类型的变量。

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

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

main() {
  doStats(jobXCount);    
}

但是有很多jobCount变量,那么在调用函数时如何有效地更改参数中使用的变量?

【问题讨论】:

  • 如果您能阐明“那个”变量的含义,那可能会有所帮助。

标签: dart


【解决方案1】:

我想我知道你在问什么。不幸的是,答案是“除非你愿意包装你的整数,否则你不能这样做”。数字是不可变的对象,你不能改变它们的值。即使 Dart 的数字是对象,并且它们是通过引用传递的,它们的内在价值也不能改变。

另见Is there a way to pass a primitive parameter by reference in Dart?

【讨论】:

    【解决方案2】:

    你可以包装变量,然后你可以将它们作为参考传递:

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

    【讨论】:

    • 您可以重载 IntRef 类的运算符。所以不需要 var.val++;
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 2021-02-14
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多