签名的智能匹配误解

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

有人可以向我解释一下吗?

1个回答

9
一个值扮演“定位”角色需要多少个东西?或者一个值扮演"关联"角色需要多少个东西?提示在于 "一个" 值和 "一" 个值。它是一个单独的东西。因此,是的,给定的数组或哈希可以有零、一个、两个或多个元素。但是它本身是一个单一的东西。$表示标量符号或值。对于标量符号或值的限制是,它一次只能绑定到一个单一的东西(即使该东西本身可以包含多个元素)。

在这个角度上,那么第二种情况和第三种情况呢? - jakar
请再仔细看一下您的问题,思考一下,如果您仍然有疑问,请在此处评论以提醒我详细说明第2点和第3点。谢谢。 - raiph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接