Chapel:复制 Stridable 域

Chapel: Copying Stridable Domains

我想存储一组域。我的代码类似于:

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

谢谢

如所示示例中的矩形域类型实际上具有定义它的三个参数:rankidxTypestridable(问题中的示例指定 rank=1). stridable 参数默认为 false,因此不能分配可跨域。要指定域应该是跨步的,您可以使用 stridable=true:

声明域类型
var doms: [1..10] domain(1, stridable=true);
...
doms[i] = {0..30 by 3};

如您所见,将跨步域转换为类型 domain(1) 会默默地丢弃跨步,因为 domain(1) 只能有一个单位跨步。如果您更愿意出现错误而不是静静地放弃步幅,则可以使用 safeCast 代替。 A 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.