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

时间:2017-07-07 15:44:09

标签: 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];

为了完整性:

  

chpl版本1.16.0预发布(2659cc6)

1 个答案:

答案 0 :(得分:2)

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

与此同时,您应该能够使用以下基于pragma的解决方法(请注意,Chapel pragma通常不会用于最终用户,并且该pragma在长期内不太可能得到支持,尽管我不希望我们退出它而不提出像建议的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);