代码之家  ›  专栏  ›  技术社区  ›  Evan Carroll

如何在签名中声明可选参数?

  •  2
  • Evan Carroll  · 技术社区  · 6 年前

    假设我有

    use v5.026;
    use feature 'signatures';
    
    sub foo ($opt1, $opt2) {
      say $opt1 if $opt2;
    }
    
    main::foo(1,2);
    main::foo(1);
    

    现在我想打电话 foo 有无opt2:

    foo(1);    # not currently accepted
    foo(1,2);  # works fine
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   Evan Carroll    6 年前

    具有子例程签名的可选参数需要定义的默认值 = default_value_expression . 你可以硬设为 undef :

    sub foo ($opt1, $opt2 = undef) {
      say $opt1 if $opt2;
    }
    
        2
  •  3
  •   Grinnz    6 年前

    您还可以通过以数组结束签名来允许任意数量的可选参数,该签名将删除任何剩余的参数,并且不允许任何值,如普通数组赋值。

    sub foo ($opt1, @opts) {