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?

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).


Was ist in dieser Perspektive mit den Fällen [2] und [3]?
Jakar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.