0

我第一次遇到这个问题,我无法弄清楚。

假设我们有一个数组和一个 foreach 循环。像这样的东西:

var v = array(10,20,50);
var i = 0
write(foo(v, v[i++]));

function foo(ref int[] v, name int y){
  foreach(int j in v){
    write(y);
  }
  return y;
}

我错了还是这里行不通?我的意思是,每次我将通过 foreach 循环时,我都会评估 y(按名称),因此,作为 v[i++],我会将我的 i 变量的值增加一。

  1. 所以第一步 y = v[0] 所以 write(10) 然后 i++ (i=1)。
  2. 第二步 y = v[1] 所以 write(20) 然后我将 i 加一(i=2)。
  3. 第三步也是最后一步 y = v[2] 所以再次写(50)和 i++,现在等于 3。

现在,它应该返回什么值?!如果我再次评估 y,我不能做 y = v[3] 因为我超出了界限。我做错什么了吗?我应该在 foreach 循环之前只评估一次 y 吗?在按名称调用参数时,我没有考虑到 foreach 一定有什么东西。

不知道,我有点困惑。

提前致谢!

4

0 回答 0