有没有一种编程语言可以用不同类型的参数声明函数?
Is there a programming language where functions can be declared with different type arguments?
我一直在幻想这种语言,您可以在其中定义具有相同名称但参数类型(或长度)不同的不同函数。
这是一个简单的例子,假设使用类似 C 的语法。
struct vect {
int x;
int y;
};
struct guy {
struct vect pos;
char *name;
};
struct guy new_guy(vect v, char *name) {
struct guy g;
g.pos = v;
g.name = name;
return g;
}
struct guy new_guy(int x, int y, char *name) {
struct vect v;
v.x = x;
v.y = y;
return new_guy(v, name);
}
int get_x(struct vect v) {
return v.x;
}
int get_x(struct guy g) {
return g.pos.x;
}
重点在于避免使用长名称,例如:get_vect_x
和 get_guy_x
等。编译器知道我们使用什么类型来调用函数,因此这应该不是问题找出要使用的定义。
不同数量的参数也可以有不同的定义。
Java 能够做到这一点,这让我想知道 C++ 是否可以(与 Java 相比,它的经验要少得多)。支持使用不同参数或相似参数声明不同类型的同名方法,即使使用构造函数也是如此。这很可能在 Java 中很容易实现,因为它是一种静态类型的语言。检查是否可行的一种快速方法是查看特定语言标准库的文档,了解采用不同参数组合的构造函数。
来自维基:
在某些编程语言中,函数重载或方法重载是创建多个同名函数的能力
不同的实现。对重载函数的调用将 运行 适合调用上下文的该函数的特定实现,
允许一个函数调用根据上下文执行不同的任务。
我一直在幻想这种语言,您可以在其中定义具有相同名称但参数类型(或长度)不同的不同函数。
这是一个简单的例子,假设使用类似 C 的语法。
struct vect {
int x;
int y;
};
struct guy {
struct vect pos;
char *name;
};
struct guy new_guy(vect v, char *name) {
struct guy g;
g.pos = v;
g.name = name;
return g;
}
struct guy new_guy(int x, int y, char *name) {
struct vect v;
v.x = x;
v.y = y;
return new_guy(v, name);
}
int get_x(struct vect v) {
return v.x;
}
int get_x(struct guy g) {
return g.pos.x;
}
重点在于避免使用长名称,例如:get_vect_x
和 get_guy_x
等。编译器知道我们使用什么类型来调用函数,因此这应该不是问题找出要使用的定义。
不同数量的参数也可以有不同的定义。
Java 能够做到这一点,这让我想知道 C++ 是否可以(与 Java 相比,它的经验要少得多)。支持使用不同参数或相似参数声明不同类型的同名方法,即使使用构造函数也是如此。这很可能在 Java 中很容易实现,因为它是一种静态类型的语言。检查是否可行的一种快速方法是查看特定语言标准库的文档,了解采用不同参数组合的构造函数。
来自维基: 在某些编程语言中,函数重载或方法重载是创建多个同名函数的能力 不同的实现。对重载函数的调用将 运行 适合调用上下文的该函数的特定实现, 允许一个函数调用根据上下文执行不同的任务。