如何 return 引用 Chapel 中的数组切片?
How to return a reference to a slice of an array in Chapel?
我正在尝试 return 对数组切片的引用,但出现以下编译时错误(违规行位于 slice
test.chpl:9: error: illegal expression to return by ref
返回整个数组工作正常,在主程序中引用一个切片也是如此。
是否有 return 切片引用的正确方法?提前致谢!
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 Version 1.16.0 pre-release (2659cc6)
对于您使用的当前版本的编译器,这是一个在 GitHub issue #5341 上进行辩论的悬而未决的问题。我同意你的看法,ref
似乎是一种适当的方式来表明 return 数组的一部分的意图,但我们还没有结束讨论。
与此同时,您应该能够使用以下基于 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);
我正在尝试 return 对数组切片的引用,但出现以下编译时错误(违规行位于 slice
test.chpl:9: error: illegal expression to return by ref
返回整个数组工作正常,在主程序中引用一个切片也是如此。
是否有 return 切片引用的正确方法?提前致谢!
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 Version 1.16.0 pre-release (2659cc6)
对于您使用的当前版本的编译器,这是一个在 GitHub issue #5341 上进行辩论的悬而未决的问题。我同意你的看法,ref
似乎是一种适当的方式来表明 return 数组的一部分的意图,但我们还没有结束讨论。
与此同时,您应该能够使用以下基于 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);