按名称评估和foreach循环

时间:2013-06-16 16:32:14

标签: language-agnostic parameters foreach callbyname evaluation-strategy

我第一次遇到这个问题,我无法理解。

假设我们有一个数组和一个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。

  1. 所以第一步y = v [0]所以写(10)然后i ++(i = 1)。
  2. 第二步y = v [1]所以写(20)然后我将i增加一(i = 2)。
  3. 第三步也是最后一步y = v [2]所以再次写(50)和i ++,现在等于3。
  4. 现在,它应该返回什么价值?!如果我再次评价y,我不能做y = v [3]因为我出界了。我做错了吗?在foreach循环之前,我应该只评估y一次吗?在按名称调用参数时,我不会考虑使用foreach。

    Dunno,我有点困惑。

    提前致谢!

0 个答案:

没有答案