签名智能匹配误解

Signatures smartmatching misunderstanding

在阅读和尝试签名智能匹配时,我 运行 遇到了一些奇怪的事情。

正在执行以下 smartmaching 签名对:

my @sigs = :($a, $b), :($a, @b), :($a, %b);
my @signatures_to_check = :($, $), :($, @), :($, %);

my $c = 0;

for @sigs -> $sig {
    for @signatures_to_check -> $s {
        $c++;

        if $sig ~~ $s {
            say "  [ $c ]  " ~ $sig.gist ~ '        match ' ~ $s.gist;
            next;
        }

        say "  [ $c ]  " ~ $sig.gist ~ ' do NOT match ' ~ $s.gist;
    }

    say "\n" ~ '#' x 40 ~ "\n";
}

我得到了以下结果:

  [ 1 ]  ($a, $b)        match ($, $)
  [ 2 ]  ($a, $b) do NOT match ($, @)
  [ 3 ]  ($a, $b) do NOT match ($, %)

########################################

  [ 4 ]  ($a, @b)        match ($, $)
  [ 5 ]  ($a, @b)        match ($, @)
  [ 6 ]  ($a, @b) do NOT match ($, %)

########################################

  [ 7 ]  ($a, %b)        match ($, $)
  [ 8 ]  ($a, %b) do NOT match ($, @)
  [ 9 ]  ($a, %b)        match ($, %)

我尝试过解释自己的案例 [4] 和 [7],但我失败了!

谁能给我解释一下?

Positional 作用的值有多少?或者扮演 Associative 角色的人?

提示在“a 值做...”和“one 做...”。这是一个的事情。

所以,是的,给定的 ArrayHash 有零个、一个、两个或更多 元素 。但它是,本身,一个单一的东西。

$ 表示 标量 符号或值。 标量 符号或值的约束是什么?它一次绑定到 a 单个 事物(即使那个事物本身可以包含多个元素)。