Manchmal fange ich an, eine Kette von Methodenaufrufen im Perl 6 REPL zu schreiben, wie zum Beispiel:
".".IO.dir.grep(...).map(...).
... und dann wird mir klar, dass ich mit der endgültigen Liste jedes Element in einer eigenen Zeile drucken möchte. Ich würde erwarten, dass Sequenzen so etwas wie eine each
Methode haben, mit der ich die Kette beenden könnte .each(*.say)
, aber es gibt keine solche Methode, die ich finden kann. Stattdessen muss ich zum Anfang der Zeile zurückkehren und voranstellen .say for
. Es fühlt sich an, als würde es den Fluss meiner Gedanken unterbrechen.
Es ist ein kleiner Ärger, aber es scheint mir eine so krasse Auslassung zu sein, dass ich mich frage, ob mir eine einfache Alternative fehlt. Die einzigen, an die ich denken kann, sind ».say
und .join("\n").say
, aber die ersteren können die Elemente in unregelmäßiger Reihenfolge bearbeiten (wenn ich das richtig verstehe), und die letzteren konstruieren eine einzelne Zeichenfolge, die je nach Eingabeliste problematisch groß sein kann.
True
Werten aus, die dieselbe Länge wie die Eingabeliste haben. Nicht ideal.".".IO.dir.grep(*.contains("e")).map(*.uc).map: {.say; Empty}
wird das gleiche tun, aber nur eine leere Liste in der REPL erwähnentell
das Out-Dateihandle vor und nach dem Befehl aufruft und sie vergleicht, denke ich? Mit dieser Logik könnte also etwas schief gehen.Sie können Ihre eigenen rollen.
Wenn Ihnen das gefällt, gibt es genau dort Ihre erste Möglichkeit für ein CPAN-Modul .
quelle
.&each()
, falls sie nicht mit Augmenting herumspielen möchten..&each()
Formats hat Nachteile, z. B. die Notwendigkeit, sich an eine einzelne Zeile zu halten (oder\
überall ziemlich unhandlich zu sein ).