【问题标题】:Is there a programming language where functions can be declared with different type arguments?是否有一种编程语言可以用不同的类型参数声明函数?
【发布时间】:2018-08-24 04:16:47
【问题描述】:

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

这是一个简单的例子,假设语法类似于 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 等。编译器知道我们使用什么类型来调用函数,因此确定要使用哪个定义应该不是问题使用。

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

【问题讨论】:

    标签: arguments programming-languages


    【解决方案1】:

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

    wiki link giving definition of function overloading

    【讨论】:

    • 谢谢。我在发布问题后发现了一段时间。这是正确的答案。
    【解决方案2】:

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

    【讨论】:

    • 太棒了,可惜我不喜欢 OOP,否则 Java 对我来说是完美的语言 xD
    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2015-09-09
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多