在尝试编写算术平均函数时,最好编写一个模板函数而不是两个特定于函数的函数。人们可以写:
proc mean(data: [?] ?T): real
但是如何将T限制为int
或real
。
还可以定义一个可以有int
或real
数据的数组,即有没有办法表示数组内容的联合类型?
答案 0 :(得分:4)
要将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支持安全联盟和工会阵列。工会语言规范的第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;