3

我想存储一个域数组。我的代码与此类似:

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)表我失去了步幅信息。如何在不失步幅的情况下复制域?

谢谢

4

1 回答 1

3

示例中所示的矩形域类型实际上具有定义它的三个参数:rankidxTypestridable(问题中的示例指定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.
于 2017-04-12T14:57:44.577 回答