如何在Chapel中返回对数组切片的引用?

Nik*_*han 6 arrays slice chapel

我正在尝试返回对数组切片的引用,但是我得到了以下编译时错误(其中有问题的行在 slice

test.chpl:9:错误:ref返回非法表达式

返回完整数组工作正常,就像在主程序中引用切片一样.

有没有正确的方法将ref返回到切片?提前致谢!

record R {
  var A : [0.. #10] int;

  proc full() ref {
    return A;
  }

  proc slice() ref {
    return A[0.. #5];
  }
}

var r : R;
ref x1 = r.full();
ref x2 = r.slice();
ref x3 = x1[0.. #5];
Run Code Online (Sandbox Code Playgroud)

只是为了完整性:

chpl版本1.16.0预发布(2659cc6)

Bra*_*rad 2

截至您使用的编译器的当前版本,这是一个悬而未决的问题,正在GitHub 问题 #5341上进行讨论。我同意你的观点,这ref似乎是表明返回数组切片意图的适当方法,但我们尚未结束讨论。

同时,您应该能够使用以下基于编译指示的解决方法(请注意,Chapel 编译指示通常不适合最终用户使用,并且从长远来看,该编译指示不太可能得到支持,尽管我不会这样做)不要指望我们在没有提出像提议的替代方法的情况下就将其淘汰ref):

record R {
  var A : [0.. #10] int;

  proc full() ref {
    return A;
  }

  pragma "no copy return"
  proc slice() {
    return A[0.. #5];
  }
}

var r : R;
ref x1 = r.full();
ref x2 = r.slice();
ref x3 = x1[0.. #5];
x1[0] = 1;
x2[1] = 2;
x3[2] = 3;
writeln(r);
Run Code Online (Sandbox Code Playgroud)

  • 只是一个快速的后续行动——看来我可以将引用返回到迭代器中的切片(使用“ref”返回意图)。这与从“proc”返回有一个有趣的区别...... (2认同)