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)
我丢失了步幅信息。
如何在不失步的情况下复制域?
谢谢
如所示示例中的矩形域类型实际上具有定义它的三个参数: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)
会默默地丢弃跨步,因为 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.
我想存储一组域。我的代码类似于:
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)
会默默地丢弃跨步,因为 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.