我想存储一个域数组。我的代码与此类似:
var doms:[1..10] domain(1);
...
doms[i]={0..30 by 3}
我收到以下错误:
cannot assign from stridable domain to an unstridable domain without an an explicit cast
使用演员dom[i]={0..30 by 3} : domain(1)
表我失去了步幅信息。如何在不失步幅的情况下复制域?
谢谢
我想存储一个域数组。我的代码与此类似:
var doms:[1..10] domain(1);
...
doms[i]={0..30 by 3}
我收到以下错误:
cannot assign from stridable domain to an unstridable domain without an an explicit cast
使用演员dom[i]={0..30 by 3} : domain(1)
表我失去了步幅信息。如何在不失步幅的情况下复制域?
谢谢
示例中所示的矩形域类型实际上具有定义它的三个参数:rank
、idxType
和stridable
(问题中的示例指定rank=1
)。该stridable
参数是false
默认的,因此不能分配一个可跨域。要指定域应该是可跨步的,您可以使用以下命令声明域类型stridable=true
:
var doms: [1..10] domain(1, stridable=true);
...
doms[i] = {0..30 by 3};
正如您所发现的,将跨步域强制转换为类型会domain(1)
默默地丢弃跨度,因为 adomain(1)
只能有一个单位跨度。如果您希望出现错误而不是默默地放弃步幅,您可以使用 asafeCast
代替。AsafeCast
将在丢弃之前验证原始域是否具有单位步长,如果没有则会发出错误:
doms[i] = {0..30 by 1}.safeCast(domain(1)); // This is allowed.
doms[i] = {0..30 by 3}.safeCast(domain(1)); // This is a runtime error.