我想在数组上编写一个函数,但我想要一个泛型类型.对于论证,让我们把它作为一个总和.
proc mySum(x:[] int) {
return + reduce x;
}
proc mySum(x:[] real) {
return + reduce x;
}
Run Code Online (Sandbox Code Playgroud)
泛型类型的符号是什么?我认为它是类似的东西,proc mySum(x: [] <T>) {}
但不起作用.
最简单的方法是在正式类型声明中保留元素类型:
proc mySum(x:[]) {
return + reduce x;
}
writeln(mySum([1, 2, 3]));
writeln(mySum([1.0, 2.0, 3.0]));
Run Code Online (Sandbox Code Playgroud)
这会给你:
6
6.0
Run Code Online (Sandbox Code Playgroud)
如果您想要一种以符号方式引用类型的方法,您还可以使用以下语法查询它并将其绑定到标识符(t
此处):
proc mySum(x:[] ?t) {
writeln("I'm computing a reduction over an array of ", t:string);
return + reduce x;
}
writeln(mySum([1, 2, 3]));
writeln(mySum([1.0, 2.0, 3.0]));
Run Code Online (Sandbox Code Playgroud)
这会给你:
I'm computing a reduction over an array of int(64)
6
I'm computing a reduction over an array of real(64)
6.0
Run Code Online (Sandbox Code Playgroud)
(当然,您也可以执行声明类型变量t
等操作)