Function 我可以让一个函数在Vala中处理多个数据类型参数吗?

Function 我可以让一个函数在Vala中处理多个数据类型参数吗?,function,arguments,vala,Function,Arguments,Vala,在下面的代码段中,我有两个函数执行完全相同的操作(read\u array和read\u array2),在数组中查找项目。唯一的区别是参数的数据类型(string[]、string和int[]int)。创建两个类似的函数似乎很不公平 是否有一种方法可以在一个函数中以通用方式处理这两个问题 void main(){ /*获取数组中字符串的索引*/ 字符串[]arr={“一”、“二”、“三”}; int index=read_数组(arr,“two”); 打印(@“$index\n”); 第二次(

在下面的代码段中,我有两个函数执行完全相同的操作(
read\u array
read\u array2
),在数组中查找项目。唯一的区别是参数的数据类型(
string[]、string
int[]int
)。创建两个类似的函数似乎很不公平

是否有一种方法可以在一个函数中以通用方式处理这两个问题

void main(){
/*获取数组中字符串的索引*/
字符串[]arr={“一”、“二”、“三”};
int index=read_数组(arr,“two”);
打印(@“$index\n”);
第二次();
}
第二次无效(){
/*获取数组中int的索引*/
int[]arr={1,2,3};
int index=read_array2(arr,2);
打印(@“$index\n”);
}
公共整数读取数组(字符串[]arr,字符串指针){
对于(int i=0;i
您可以使用泛型,但在某些方面必须小心

首先,不能将值类型的数组(即
int[]
)传递给泛型函数,请参见此问题以供参考:

其次,您需要通过某种类型的相等性测试函数,您必须为每种类型编写一次

以下是一个工作示例:

公共委托bool EqualFunc(tl,tr);
布尔str_等于(字符串l,字符串r){
返回l==r;
}
bool int_等于(int?l,int?r){
返回l==r;
}
公共整数读取数组(T[]arr,T针,EqualFunc equal_func){
对于(int i=0;i
像这样将一个值装箱到一个可为空的值中是非常难看的,但是我不知道有什么更好的方法来解决上面提到的编译器问题

如果您愿意使用libgee,您可以使用Gee.ArrayList,它也可以工作