Language agnostic 按名称调用求值和foreach循环

Language agnostic 按名称调用求值和foreach循环,language-agnostic,parameters,foreach,callbyname,evaluation-strategy,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(

这是我第一次面对这个问题,我想不出来

假设我们有一个数组和一个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]写(10),然后写i++(i=1)
  • 第二步y=v[1]所以写(20),然后我增加I一(I=2)
  • 第三步也是最后一步y=v[2],再次写(50)和i++,现在等于3
  • 现在,它应该返回什么值?!如果我再次计算y,我不能做y=v[3],因为我超出了界限。我做错什么了吗?我应该在foreach循环之前计算y一次吗?在按名称调用参数时,我一定没有考虑foreach的某些方面

    不知道,我有点困惑


    提前谢谢

    请至少用相关的编程语言标记Hey@PaulR抱歉,我说的不是特定的语言,只是伪代码。我认为不能像foo()函数那样,同时通过引用和名称传递两个参数。它仅用于教育目的,不愿意在实际的程序中实现。如果您真的想让它独立于任何特定的编程语言,则有一个
    语言不可知标记。