Perl 6中"List:D:"中的第二个冒号是什么意思?

che*_*nyf 7 raku

doc.perl6.org中,我见过很多像这样的方法:

method sum(List:D: --> Numeric:D)
Run Code Online (Sandbox Code Playgroud)

我知道List:D是一种定义的List类型,但是冒号后的冒号D(即第二个冒号List:D:)是什么?

我在S12对象中找到了一些解释:

= head2 Invocants

调用者的声明是可选的.您可以始终使用关键字访问当前的调用者self....要标记显式调用者,只需在其后面添加冒号:

method doit ($x: $a, $b, $c) { ... }
Run Code Online (Sandbox Code Playgroud)

但我不明白,乍一看有点奇怪.

Bra*_*ert 6

默认情况下,方法具有调用 self

所以这两个都是等价的:

method foo (        $a ){…}
method foo ( \self: $a ){…} # generates warning
Run Code Online (Sandbox Code Playgroud)

因此,将第一个例子扩展到它的简称

method sum( List:D \self: --> Numeric:D ){…} # generates warning
Run Code Online (Sandbox Code Playgroud)

基本上,如果要为方法指定调用者(第一个参数)的类型,只是想要使用self而不是指定新变量,那么就这样写.


它使用:从其他参数中分离调用剂的原因是为了简化您没有指定调用者或调用者类型的常见情况.