Signaturen Smartmatching Missverständnisse

8

Beim Lesen und Ausprobieren von Signatur-Smartmatching stoße ich auf etwas Seltsames.

Ausführen der folgenden Smartmaching-Signaturpaare:

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";
}

Ich habe folgende Ergebnisse:

  [ 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 ($, %)

Ich habe versucht, mir die Fälle [4] und [7] zu erklären, aber ich bin gescheitert!

Kann es mir jemand erklären?

Jakar
quelle

Antworten:

9

Wie viele Dinge ist ein Wert, der die PositionalRolle spielt? Oder eine, die die AssociativeRolle spielt?

Der Hinweis steht in " einem Wert, der ..." und " einem , der ...". Es ist eine einzige Sache.

Also ja, ein gegebenes Arrayoder Hashhat null, eins, zwei oder mehr Elemente . Aber es ist an sich eine einzige Sache.

$zeigt ein skalares Symbol oder einen skalaren Wert an. Was ist die Einschränkung für ein skalares Symbol oder einen skalaren Wert? Es ist so, dass es gleichzeitig an eine einzelne Sache gebunden ist (selbst wenn diese Sache selbst mehrere Elemente enthalten kann).

Raiph
quelle
Was ist in dieser Perspektive mit den Fällen [2] und [3]?
Jakar