Wie kann ich ein Array oder eine Array-Referenz in Perl 6 abschneiden?
In Perl 5 kann ich das tun:
%Vor%In Perl 6 erhalte ich einen Fehler, wenn ich folgendes versuche:
%Vor%Das funktioniert, aber es sieht weniger schön aus als der Perl 5-Weg und kann teuer sein:
%Vor%Es gibt einen einfachen Weg:
%Vor%Das ist problematisch, wenn das Array ein unendliches ist.
$d.splice(5)
hat auch das gleiche Problem.
Ihre beste Wette ist wahrscheinlich $d = [ $d[^5] ]
im durchschnittlichen Fall, wo Sie nichts über das Array wissen und ein veränderbares Array benötigen.
Wenn Sie nicht möchten, dass es veränderbar ist $d = $d[^5]
, was eine Liste zurückgibt, ist möglicherweise besser.
splice
ist wahrscheinlich die beste Wahl hier, aber Sie können auch auf fünf Elemente verkürzen, indem Sie% verwenden. co_de% range constructor shortcut (Ich nenne dies den "up to" "operator", aber ich bin mir sicher, dass es einen richtigeren Namen gibt, da es ein Konstruktor eines ^N
):
"Das Caret ist ... ein Präfixoperator zum Erstellen numerischer Bereiche ausgehend von Null ".
(Aus derRange
-Dokumentation )
Man kann argumentieren, dass Perl6 "perl-ish" in dem Sinne ist, dass es normalerweise eine explizite Version einer Operation hat (mit einer Art "vorhersagbarer" Syntax - eine Methode, eine Routine und Range
, etc.) das ist verständlich, wenn Sie nicht mit der Sprache vertraut sind, und dann eine Abkürzung-ish-Variante.
Ich bin mir nicht sicher, welcher Ansatz ( :adverb
gegenüber der Verknüpfung im Vergleich zu splice
, wie Brad Gilbert erwähnt) einen Vorteil in der Geschwindigkeit oder im Speicherverbrauch hätte. Wenn Sie Folgendes ausführen:
Sie können einen kleinen Unterschied sehen. Der Unterschied könnte signifikanter sein, wenn Sie mit einem realen Programm und einer Arbeitslast vergleichen.