perl6中方法声明中的含义是什么?

teo*_*jan 5 perl6 raku

Perl6中方法声明中的加号意味着什么?

这是spec的一个例子

submethod BUILD (+$tail, +@legs, *%extraargs) {
    $.tail = $tail;
    @:legs = @legs; 
}
Run Code Online (Sandbox Code Playgroud)

mor*_*itz 9

你的"规范"链接转到了一个历史文档,语法早已从Perl 6中消失了.我不知道它曾经做过什么,可能是"至少一个参数",类似于正则+表达式中的量词.

有关最新规范,请阅读http://perlcabal.org/syn/S06.html,其中包含有关签名和子例程的所有信息.


rai*_*iph 9

2019年更新Variadic位置解构+@foo*@foo部分; 我回答SO问题"函数/子程序的可变数量的参数".


大约一个星期前(9月2015)Larry Wall的推出了全新的+参数前缀,四个参数前缀一个(*,**,+,|)即表示slurpy(可变参数)参数.到目前为止,他已将这个新前缀添加到Rakudo Perl 6编译器中,添加了一些测试,在#perl6上给出了简短的非正式描述,并在相关语言设计文档中添加了一个部分.


原始问题中引用的例子取自十年前编写和冻结的非正式文件的档案.那时,+参数前缀表示命名参数与位置参数对比.现在我们用:它,因此:

submethod BUILD (:$tail, :@legs, *%extraargs) {
    $.tail = $tail;
    @.legs = @legs;
}
Run Code Online (Sandbox Code Playgroud)