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

时间:2018-05-06 17:59:18

标签: signature perl6

我在another question中看到了此错误消息,我想知道$:部分签名的含义是什么?

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, *%_)

2 个答案:

答案 0 :(得分:9)

$:是两个不同的无关标记,$:,它们一起被粉碎。

$表示单个项目 1 又称标量 2

单项/标量没有给出名称,因此无法引用它。已经足够的参数(Str:D)让你和编译器知道这个参数是标量(单个字符串)。无论哪种方式,$都是多余的Elizabeth has made a related change

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

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

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

(如果不使用,则调用参数是隐式的。)

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

疯狂的顶级脚注增加娱乐性。如果他们让你感到困惑,就忘记你曾经读过它们。

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

2 "标量"是一个传统的计算术语。 Wikipedia's Scalar disambiguation page列出" Variable (computing)或标量,一次只能包含一个值的原子数量"作为一个定义。此外,单个项目标量(全部小写)通常/通常为Scalar(大写 S ),这是一个特例 S ingle I tem 容器的项目包含 S ingle tem(可以将复合数据视为单一内容)。

答案 1 :(得分:0)

:将第一个参数标记为invocant

my $word = "bananarama";
say $word.index( "r", 0 );

在这种情况下,它表示将调用者视为标量,因为它受到单个$

的约束