有没有一种编程语言可以用不同类型的参数声明函数?

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_xget_guy_x 等。编译器知道我们使用什么类型来调用函数,因此这应该不是问题找出要使用的定义。

不同数量的参数也可以有不同的定义。

Java 能够做到这一点,这让我想知道 C++ 是否可以(与 Java 相比,它的经验要少得多)。支持使用不同参数或相似参数声明不同类型的同名方法,即使使用构造函数也是如此。这很可能在 Java 中很容易实现,因为它是一种静态类型的语言。检查是否可行的一种快速方法是查看特定语言标准库的文档,了解采用不同参数组合的构造函数。

来自维基: 在某些编程语言中,函数重载或方法重载是创建多个同名函数的能力 不同的实现。对重载函数的调用将 运行 适合调用上下文的该函数的特定实现, 允许一个函数调用根据上下文执行不同的任务。

wiki link giving definition of function overloading