Perl6 - 在某些子例程签名中 $: 是什么
Perl6 - What is the $: for in some subroutine Signatures
我在 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, *%_)
:
将第一个参数标记为 invocant。
my $word = "bananarama";
say $word.index( "r", 0 );
在这种情况下,它表示调用者将被视为标量,因为它受到单个 $
的约束
$:
是两个截然不同的不相关标记,一个 $
和一个 :
,它们被混合在一起。
$
表示单个项目1 又名标量2.
单个项目/标量尚未命名,因此无法引用它。并且已经有足够的参数(Str:D
)让您和编译器知道这个参数是一个标量(单个字符串)。无论哪种方式,$
都是多余的,.
:
是一个特殊的参数分隔符。 (通常的参数分隔符是逗号,
。)
它只能在方法或独立签名的第一个参数之后立即使用。它不能用于不是方法的例程的签名中。
如果用作签名中第一个参数之后的参数分隔符,它会将该参数标记为对应于方法的 "invocant"。
(如果不使用,invocant参数是隐含的。)
相应的调用者 参数 无论如何都会到达,并别名为 self
,无论签名是否明确列出调用者参数。但是如果显式指定了 invocant 参数,可以给它一个 additional/alternate 名称 and/or 显式约束它的类型。
疯狂的夸张脚注增加了娱乐性。如果它们让您感到困惑,请忘记您是否阅读过它们。
1单项指的是自然是单一事物的数据,比如数字42
,OR数据这自然是一个复合事物(如数组),被视为单一事物(如数组)。 (你看到我在那里做了什么吗?)我想指出 $
符号就像 S(对于单个)覆盖有 I(对于项目),反之亦然。对我来说,这代表了强调任何数据的单项性质,隐藏任何复数方面的想法,即使它实际上是一个数组或其他复合数据项。
2 "scalar" 是一个传统的计算术语。 Wikipedia's Scalar
disambiguation page lists "Variable (computing)
, or scalar, an atomic quantity that can hold only one value at a time" as a definition. Also, a single item aka scalar (all lowercase) is often/usually a Scalar
(大写 S
),单个项目的特例,即 Single Item container 包含一个 Single Item(可以是复合的数据被视为单一事物)。
我在 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, *%_)
:
将第一个参数标记为 invocant。
my $word = "bananarama";
say $word.index( "r", 0 );
在这种情况下,它表示调用者将被视为标量,因为它受到单个 $
$:
是两个截然不同的不相关标记,一个 $
和一个 :
,它们被混合在一起。
$
表示单个项目1 又名标量2.
单个项目/标量尚未命名,因此无法引用它。并且已经有足够的参数(Str:D
)让您和编译器知道这个参数是一个标量(单个字符串)。无论哪种方式,$
都是多余的,
:
是一个特殊的参数分隔符。 (通常的参数分隔符是逗号,
。)
它只能在方法或独立签名的第一个参数之后立即使用。它不能用于不是方法的例程的签名中。
如果用作签名中第一个参数之后的参数分隔符,它会将该参数标记为对应于方法的 "invocant"。
(如果不使用,invocant参数是隐含的。)
相应的调用者 参数 无论如何都会到达,并别名为 self
,无论签名是否明确列出调用者参数。但是如果显式指定了 invocant 参数,可以给它一个 additional/alternate 名称 and/or 显式约束它的类型。
疯狂的夸张脚注增加了娱乐性。如果它们让您感到困惑,请忘记您是否阅读过它们。
1单项指的是自然是单一事物的数据,比如数字42
,OR数据这自然是一个复合事物(如数组),被视为单一事物(如数组)。 (你看到我在那里做了什么吗?)我想指出 $
符号就像 S(对于单个)覆盖有 I(对于项目),反之亦然。对我来说,这代表了强调任何数据的单项性质,隐藏任何复数方面的想法,即使它实际上是一个数组或其他复合数据项。
2 "scalar" 是一个传统的计算术语。 Wikipedia's Scalar
disambiguation page lists "Variable (computing)
, or scalar, an atomic quantity that can hold only one value at a time" as a definition. Also, a single item aka scalar (all lowercase) is often/usually a Scalar
(大写 S
),单个项目的特例,即 Single Item container 包含一个 Single Item(可以是复合的数据被视为单一事物)。