我试图返回对数组切片的引用,但是我收到了以下编译时错误(违规行位于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)
答案 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);