我第一次遇到这个问题,我无法弄清楚。
假设我们有一个数组和一个 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 变量的值增加一。
- 所以第一步 y = v[0] 所以 write(10) 然后 i++ (i=1)。
- 第二步 y = v[1] 所以 write(20) 然后我将 i 加一(i=2)。
- 第三步也是最后一步 y = v[2] 所以再次写(50)和 i++,现在等于 3。
现在,它应该返回什么值?!如果我再次评估 y,我不能做 y = v[3] 因为我超出了界限。我做错什么了吗?我应该在 foreach 循环之前只评估一次 y 吗?在按名称调用参数时,我没有考虑到 foreach 一定有什么东西。
不知道,我有点困惑。
提前致谢!