Perl6 - 在一些子例程签名中的$:for

p6s*_*eve 8 signature perl6

我在另一个问题中遇到了这个错误信息,我想知道$:部分签名的含义是什么?

Cannot resolve caller index(Str: Str, Any); none of these signatures match:
      (Str:D $: Cool:D $needle, *%_)
      (Str:D $: Str:D $needle, *%_)
      (Str:D $: Cool:D $needle, Cool:D $pos, *%_)
      (Str:D $: Str:D $needle, Int:D $pos, *%_)
Run Code Online (Sandbox Code Playgroud)

rai*_*iph 9

$:是两个截然不同的无关标记,a $和a :,它们一起被粉碎.


$代表单个项目1又名标量2.

单项/标量没有给出名称,因此无法引用它.并且已经有足够的参数(Str:D)让你和编译器知道这个参数是标量(单个字符串).无论哪种方式,这$都是多余的,伊丽莎白已经做出了相关的改变.


:是一个特殊的参数分隔符.(通常的参数分隔符是逗号,.)

它只能在方法或独立签名的第一个参数之后立即使用.它不能用于不是方法的例程的签名.

如果在签名中的第一个参数之后用作参数分隔符,则它将该参数标记为对应于方法的"invocant".

(如果未使用,则invocant参数是隐式的.)

无论如何,相应的invocant 参数将到达,并且self无论签名是否明确列出了调用参数,都要别名.但是如果显式指定了invocant参数,则可以为其提供附加/备用名称和/或明确约束其类型.


疯狂的顶级脚注增加娱乐.如果他们混淆了你,就忘记你曾经读过它们.

1单个项目指的是自然是单个事物的数据,如数字42,OR数据自然是复合事物(如数组),它被视为单个事物(如数组).(你看到我在那里做了什么吗?)我想指出一个$符号就像一个S(对于单个)覆盖着一个I(对于项目)的助记符,反之亦然.对我来说,这代表强调任何数据的单项性质的想法,隐藏任何复数方面,即使它实际上是一个数组或其他复合数据项.

2 "标量"是一个传统的计算术语.维基百科的Scalar消歧页面列出了" Variable (computing)或标量,一次只能保存一个值的原子数量"作为定义.此外,又名单个项目的标量(全部小写)是经常/通常是Scalar(大写S),这是一个单个项目的一种特殊情况小号英格尔 TEM 容器包含一个小号英格尔 TEM(其可以是复合的数据被当作一件事).