Programming languages 哪些编程语言允许方法参数的默认值?

Programming languages 哪些编程语言允许方法参数的默认值?,programming-languages,Programming Languages,我很好奇哪种语言允许你做这样的事情: method foo(String bar = "beh"){ } foo(); foo("baz"); void foo() { foo("beh"); } void foo(String bar) { this.bar = bar; } 如果你这样称呼foo: method foo(String bar = "beh"){ } foo(); foo("baz"); void foo() { foo("beh"); }

我很好奇哪种语言允许你做这样的事情:

method foo(String bar = "beh"){

}
foo();
foo("baz");
void foo() {
   foo("beh");
}

void foo(String bar) {
   this.bar = bar;
}
如果你这样称呼foo:

method foo(String bar = "beh"){

}
foo();
foo("baz");
void foo() {
   foo("beh");
}

void foo(String bar) {
   this.bar = bar;
}
bar
将设置为“beh”,但如果您这样调用:

method foo(String bar = "beh"){

}
foo();
foo("baz");
void foo() {
   foo("beh");
}

void foo(String bar) {
   this.bar = bar;
}

<代码> bar <代码>将设置为“BAZ”。

< P>我知道Python允许这样做,而C、C++不这样。

< P> > C 4,现在可以有默认参数。终于

也有C++、露比和VB

我可以想到

  • C#4.0
  • C++
  • VB.Net(所有版本)
  • VB6
  • F#(仅限成员)
  • 动力壳
  • IDL
  • 红宝石
: :
Delphi从1999年发布的版本5开始就允许这样做

procedure foo(const bar: string = 'beh');
begin
...
end;

foo;
foo('baz');
Perl不支持。Java有一个变通方法

您可以让不带参数的foo方法调用参数设置为默认值的foo方法,如下所示:

method foo(String bar = "beh"){

}
foo();
foo("baz");
void foo() {
   foo("beh");
}

void foo(String bar) {
   this.bar = bar;
}
Python:

def foo(bar = value):
    # This function can be invoked as foo() or foo(something).
    # In the former case, bar will have its default value.
    pass
将Realbasic添加到列表中(事实上,Realbasic几乎拥有我能想到的每种语言的所有优秀功能,包括内省和沙盒脚本)

蟒蛇。(但要注意每个表中的可变项)

很多语言,包括C语言,都允许使用不同数量的参数,这可以有效地让你做同样的事情


在许多现代脚本语言(包括PHP、JavaScript和Perl)中,处理此类事情的更好习惯用法是允许关联数组或对象作为参数,然后根据需要指定默认值

e、 g

这消除了将可默认值放在参数列表末尾并记住所有不想覆盖的内容的必要性


一如既往--适度使用。

TCL提供了此功能

proc procName {{arg1 defaultValue} {arg2 anotherDefaultValue}} {
    # proc body
}
  • 几乎所有的口齿不清
  • 红宝石
  • 蟒蛇
  • C++
  • C#
  • Visual Basic.NET
  • Tcl
  • Visual Basic
  • 看起来
  • 塞普
  • 眼镜蛇
  • 内默尔
  • 米拉
  • 德尔菲
  • 棒极了
  • PHP
  • 幻想
  • 斯卡拉
    • :


      您可以在PL/SQL中执行此操作。

      提供了此功能以及关键字参数:

      (define (f x [y 0]) (+ x y))
      (f 1) ; => 1
      (f 10 20) ; => 30
      
      (define (g x #:y [y 0]) (- x y))
      (g 1) ; => 1
      (g 10 #:y 20) ; => -10
      

      它们在.

      中有描述。这个名称是方法重载。当然,但由于他没有询问方法重载,而是询问方法默认参数值,因此方法重载是一种解决方法。编写八个重载方法来重现三个可默认参数是非常有趣的,嗯。特别是当策略要求每个都需要有自己的长XML javadoc时。啊,我不是在为Java辩护。我只是发布解决方案。没有必要为3个默认参数编写8个方法,只有4.OCaml也有默认参数(用于命名参数).我想这可能是一个交流维基化的候选…你是要求在一个答案中列出一个详尽的列表,还是每个人都给出他们最喜欢的例子?我希望有一个答案,列出所有允许使用语法示例的语言。回想起来,这是一个很好的wikification候选选项。“允许关联数组或对象作为参数”除非你有一个使用频率不一致的大参数列表,否则这是一个可怕的想法。IIRC,REALbasic最初是作为Mac的Visual Basic克隆品出现的。鉴于这一血统,我将恭敬地不同意你的断言,即它“几乎具有每种语言的每一个优秀特征”。不过,我不会投你反对票。@NullUserException:如果你没有一种论点的任意列表,为什么这是一个可怕的想法?这是性能与灵活性/健壮性/可扩展性之间的简单折衷。在编写库代码时,我经常发现自己后悔没有选择这种方法@meador RB从来不是VB的“克隆”。从第一天起(在VB.NET之前),它就是一种完全面向对象的语言,它试图允许相对容易地移植VB项目。RB从未有过VB的丑陋。这正是我想要的答案。语言,然后是该语言中的一个示例。@Alaor,因为这绝对不是一个详尽的列表