8

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

执行以下智能匹配签名对:

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],但我失败了!

有人可以向我解释吗?

4

1 回答 1

9

有多少东西是一个值Positional起作用的?还是那个Associative角色?

提示在“一个执行...的值”和“一个执行...的值”中。这是一个单一的事情。

所以,是的,一个给定的ArrayorHash有零个、一个、两个或多个元素。但它本身就是一回事。

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

于 2020-01-02T12:43:51.367 回答