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

时间:2018-08-24 04:16:47

标签: arguments programming-languages

我一直在幻想这种语言,在这里您可以用相同的名称定义不同的函数,但其​​参数具有不同的类型(或长度)。

这是一个幼稚的示例,假设使用类似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之类的长名称。编译器知道我们正在使用什么类型来调用函数,因此弄清楚它应该不是问题列出要使用的定义。

对于不同数量的参数也可能有不同的定义。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

来自Wiki: 在某些编程语言中,函数重载或方法重载是使用以下命令创建具有相同名称的多个函数的能力: 不同的实现。对重载函数的调用将针对该调用的上下文运行该函数的特定实现, 允许一个函数调用根据上下文执行不同的任务。

wiki link giving definition of function overloading