Warum ist die Zuordnung zu einer Liste von Variablen inkonsistent?

8

Um 2 Werte aus einer Liste zu speichern, die von einem Sub zurückgegeben wird, und die dritte wegwerfen, kann man:

%Vor%

und es funktioniert wie erwartet (in Perl5 und Perl6). Wenn Sie nur die erste jedoch wollen;

%Vor%

... Sie bekommen die ganze Liste. Dies scheint kontraintuitiv zu sein - warum die Inkonsistenz?

    
Marty 14.03.2016, 23:47
quelle

2 Antworten

9

Dies sollte an der Regel für einzelne Argumente liegen. Sie erhalten das erwartete Verhalten durch Hinzufügen eines abschließenden , :

%Vor%

Beachten Sie, dass, während dies als Deklarationen funktioniert, Container zurückgegeben werden, die erstklassige Objekte sind, die in Listen eingefügt werden können, Sie tun es trotzdem "falsch":

Die Zuweisungen sollten

lauten %Vor%

und

%Vor%

Beachten Sie auch, dass die Parens auf der rechten Seite ebenfalls überflüssig sind (es ist das Komma, das die Konstruktion aufführt); die mehr idiomatischen Versionen wären

%Vor%

und

%Vor%     
Christoph 15.03.2016, 01:03
quelle
6
%Vor%

In Ihrem ersten Beispiel ordnen Sie einer Liste von Containern eine Liste (oder einen Teil davon) zu. Ihr zweites Beispiel tut genau das, wonach Sie es fragen. Eine Liste von Werten wird einem Container zugewiesen. In Perl 5 wird die Liste (in diesem Fall) durch die Klammern gebildet, wobei in Perl 6 die Liste durch das Komma gebildet wird. Letzteres wird in meinem Beispiel verwendet, um zu bekommen, wonach gefragt wird.

Ich würde argumentieren, dass Perl 5 inkonsistent ist, da Listen manchmal durch Kommas, Klammern oder Klammern gebildet werden.

%Vor%

Sie können ein oder mehrere Listenelemente überspringen, indem Sie anonyme Statusvariablen hinzufügen. Dies führt auch zu einer Verknüpfung zu Ihrem ersten Beispiel.

%Vor%     
user5854207 15.03.2016 01:05
quelle

Tags und Links