我想存储一组域名。我的代码与此类似:
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)
我松开了步幅信息。
如何在不失去步伐的情况下复制域名?
谢谢
答案 0 :(得分:3)
显示的矩形域类型实际上有三个参数来定义它:rank
,idxType
和stridable
(问题中的示例指定rank=1
)。默认情况下,stridable
参数为false
,因此无法为其分配可扩展的域。要指定域应该是强大的,您可以使用stridable=true
声明域类型:
var doms: [1..10] domain(1, stridable=true);
...
doms[i] = {0..30 by 3};
正如您所发现的那样,将strided域强制转换为类型domain(1)
会默默地丢弃步幅,因为domain(1)
只能有一个单位步幅。如果您希望出现错误而不是默默地放弃步幅,则可以使用safeCast
代替。 safeCast
会在丢弃之前验证原始域是否具有单位步幅,如果不是,则会发出错误:
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.