是否可以在Perl 6中提供带有哈希的命名参数?

Eug*_*sky 10 perl6

怎么做正确?

> sub adding(:$first, :$second) { $first + $second }
> adding(second => 2, first => 1)
3
> my %param = second => 2, first => 1
{first => 1, second => 2}
> adding(%param)
Too many positionals passed; expected 0 arguments but got 1
  in sub adding at <unknown file> line 1
  in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)

Bra*_*ert 12

添加一个前缀|%param

adding( |%param )
Run Code Online (Sandbox Code Playgroud)

这也适用于位置参数

sub foo ( $bar, $baz ){ "$bar:$baz" }
my @args = 'a', 'b';
foo( @args ) # error
foo( |@args ) # "a:b"
Run Code Online (Sandbox Code Playgroud)

  • 对于记录,函数声明中有相应的语法.`sub foo(*%param){...}`接受任何命名参数,并将它们写入`%param`. (5认同)