代码之家  ›  专栏  ›  技术社区  ›  cmcculloh

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

  •  4
  • cmcculloh  · 技术社区  · 7 年前

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

    method foo(String bar = "beh"){
    
    }
    

    如果你这样称呼foo:

    foo();
    

    bar 将设置为“beh”,但如果您这样调用:

    foo("baz");
    

    酒吧 将设置为“baz”。

    14 回复  |  直到 16 年前
        1
  •  6
  •   NullUserException Mark Roddy    16 年前

    PHP:

    function foo($var = "foo") {
        print $var;
    }
    
    foo(); // outputs "foo"
    foo("bar"); // outputs "bar"
    

    Python :

    def myFun(var = "foo"):
        print var
    

    Ruby :

    def foo(var="foo")
        print var
    end
    

    Groovy:

    def foo(var="foo") {
        print var
    }
    
        2
  •  8
  •   JaredPar    16 年前

    我能想到的

    • C 4
    • C++
    • vb.net(所有版本)
    • VB6
    • F(仅限成员)
    • 动力壳
    • IDL
    • 红宝石
        3
  •  8
  •   Jörg W Mittag    16 年前
    • 几乎所有的口齿不清
    • 红宝石
    • 蟒蛇
    • C++
    • C.*
    • Visual Basic.NET
    • TCL
    • Visual Basic
    • 伊欧凯
    • 脓毒症
    • 眼镜蛇
    • 纽美乐
    • 米拉
    • 德尔菲
    • 格罗维
    • PHP
    • 幻想
    • 斯卡拉
        4
  •  3
  •   Erik    16 年前

    Racket 提供此参数以及关键字参数:

    (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
    

    它们在 documentation .

        5
  •  2
  •   Gerry Coll    16 年前

    Delphi从1999年发布的第5版开始就允许这样做了

    procedure foo(const bar: string = 'beh');
    begin
    ...
    end;
    
    foo;
    foo('baz');
    
        6
  •  2
  •   CanSpice    16 年前
        7
  •  2
  •   salezica    16 年前

    蟒蛇:

    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
    
        8
  •  2
  •   Chris Kooken    16 年前

    从C 4.0开始,您现在可以使用默认参数。终于!

    也有C++、露比和VB

        9
  •  2
  •   SingleNegationElimination    16 年前

    TCL提供此功能

    proc procName {{arg1 defaultValue} {arg2 anotherDefaultValue}} {
        # proc body
    }
    
        10
  •  1
  •   Corbin March    16 年前

    D :

    void foo(int x, int y = 3)
    {
       ...
    }
    ...
    foo(4);   // same as foo(4, 3);
    

    Fantom :

    class Person
    {
      Int yearsToRetirement(Int retire := 65) { return retire - age }
    
      Int age
    }
    
        11
  •  0
  •   pablosaraiva    16 年前

    Java有一个解决方案。

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

    void foo() {
       foo("beh");
    }
    
    void foo(String bar) {
       this.bar = bar;
    }
    
        12
  •  0
  •   podperson    16 年前

    将realbasic添加到列表中(事实上,realbasic几乎拥有我能想到的每种语言的每一个好特性,包括内省和沙盒脚本)。

    蟒蛇。(但注意每个 http://effbot.org/zone/default-values.htm )

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

    在许多现代脚本语言中,包括php、javascript和perl,处理这些事情的更好习惯用法是允许将关联数组或对象作为参数,然后根据需要分配默认值。

    例如

    function foo( options ){
      if( options.something === undefined ){
        options.something = some_default_value;
      }
      ...
    }
    

    这样就不必将默认值放在参数列表的末尾,也不必记住所有不想覆盖的内容。

    一如既往,适度使用。

        13
  •  0
  •   Nils Weinander    16 年前

    您可以用pl/sql来实现。

        14
  •  -1
  •   highBandWidth    16 年前

    我知道Python允许这样做,而C,C++则不这样做。