代码之家  ›  专栏  ›  技术社区  ›  librasteve

Perl6-某些子程序签名中的$:for是什么

  •  8
  • librasteve  · 技术社区  · 7 年前

    我在中遇到此错误消息 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 回复  |  直到 7 年前
        1
  •  9
  •   raiph    7 年前

    这个 $: 是两个不同的不相关标记 $ 和a : ,它们一起被闷死了。


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

    没有为单个项/标量指定名称,因此无法引用它。而且已经有足够的参数( Str:D )让您和编译器知道此参数是标量(单个字符串)。不管怎样 $ 是冗余的,并且 Elizabeth has made a related change


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

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

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

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

    对应发票人 论点 无论如何都会到达,并化名为 self ,签名是否显式列出invocant参数。但是,如果显式指定了invocant参数,则可以为其指定其他/备用名称和/或显式约束其类型。


    为增加娱乐性而疯狂地添加脚注。如果他们把你弄糊涂了,就忘了你曾经读过他们。

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

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

        2
  •  0
  •   jjmerelo    7 年前

    这个 : 将第一个参数标记为 invocant

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

    在这种情况下,它表示发票将被视为标量,因为它受单个 $