教堂:复制可怕的域名

时间:2017-04-12 14:24:54

标签: chapel

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

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

谢谢

1 个答案:

答案 0 :(得分:3)

显示的矩形域类型实际上有三个参数来定义它:rankidxTypestridable(问题中的示例指定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.