Definieren Sie eine Junction my $j = 1 | 2 | 3 | 4 | 5
, jetzt möchte ich ein Array mit dem Wert [1 2 3 4 5]
erhalten, wie soll ich das implementieren?
Ich habe versucht, $j.values
, aber Perl6 gab mir die gesamte Kreuzung als ein Element: [any((1), (2), (3), (4), (5))]
.
Wie Håkon Hægland bereits darauf hingewiesen hat, sollten Sie das nicht tun:
Junctions sollen als Matcher im booleschen Kontext verwendet werden; Introspektion von Kreuzungen wird nicht unterstützt. Wenn Sie den Drang verspüren, eine Kreuzung zu untersuchen, verwenden Sie stattdessen ein Set oder einen verwandten Typ.
Es ist jedoch möglich.
Zuerst können Sie Authothreading verwenden (dh die automatische Auswertung jedes Zweiges einer Junction, wenn diese an eine Funktion übergeben wird, die ein Argument vom Typ Any
erwartet):
Zweitens können Sie in die Eingeweide stechen und die Werte manuell extrahieren:
%Vor%Wenn Ihre Junction nicht rekursiv ist (dh keine anderen Junctions enthält, die Sie abflachen möchten), kann der zweite Ansatz vereinfacht werden:
%Vor%Dies ist beabsichtigt, soweit ich weiß.
Stellen Sie sich $ j vor, das eine Junction von Hashes enthält: dann wären $ j.values eine Verbindung von Seqs, nicht die Hashes selbst.
Wenn Sie das Array einer Junction wollen, dann sollten Sie vielleicht von einem Array starten und daraus eine Junction erstellen:
%Vor%Wenn Sie wirklich möchten, gehen Sie an die Junction - & gt; Array-Weg, könnte man, aber es würde mit nqp, und das ist etwas, was ich nicht in Userland-Code empfehlen würde.