【发布时间】:2016-09-08 09:34:17
【问题描述】:
在尝试编写算术平均函数时,最好编写一个模板函数而不是两个特定于类型的函数。可以写:
proc mean(data: [?] ?T): real
但是如何将 T 限制为 int 或 real。
还可以定义一个可以包含int 或real 数据的数组,即有没有一种方法可以表示数组内容的联合类型?
【问题讨论】:
标签: function templates types chapel
在尝试编写算术平均函数时,最好编写一个模板函数而不是两个特定于类型的函数。可以写:
proc mean(data: [?] ?T): real
但是如何将 T 限制为 int 或 real。
还可以定义一个可以包含int 或real 数据的数组,即有没有一种方法可以表示数组内容的联合类型?
【问题讨论】:
标签: function templates types chapel
要将 T 的类型限制为任意大小的 int 或 real 类型,您可以在函数定义中添加 where 子句:
proc mean(data: [] ?T): real where isIntType(T) || isRealType(T) { ... }
isIntType 和 isRealType 函数在类型模块中定义:http://chapel.cray.com/docs/latest/modules/standard/Types.html
Chapel 支持安全联合和联合数组。联合在 Chapel 语言规范的第 17 节中进行了描述:http://chapel.cray.com/docs/latest/_downloads/chapelLanguageSpec.pdf
union IntOrReal {
var i: int;
var r: real;
}
var intRealArray: [1..2] IntOrReal;
intRealArray[1].i = 1;
intRealArray[2].r = 2.0;
【讨论】:
where isIntType(T) || isRealType(T) || T == IntOrReal。
intRealArray.i = 1;。