Cursus Raku / Geavanceerd / Operatoren / Meta-operatoren
Cross, hyper en genegeerd
Naast reductie en zip heeft Raku nog verschillende andere meta-operatoren. Drie ervan zijn hier het vermelden waard.
Cross — X
De cross-meta-operator X koppelt elk
element van de ene lijst aan elk element van de andere
— het cartesisch product:
say <a b> X <1 2>; # ((a 1) (a 2) (b 1) (b 2))Net als zip kan hij een operator omhullen om op elk paar te werken.
X~ voegt elk paar samen tot een tekenreeks, en
X* vermenigvuldigt:
say <a b> X~ <1 2>; # (a1 a2 b1 b2)
say (1, 2, 3) X* (10, 100); # (10 100 20 200 30 300)Waar zip twee lijsten gelijktijdig doorloopt, combineert cross ze op elke mogelijke manier.
Hyper — >>...<<
Een hyper-meta-operator past een operator toe op elk
element van een lijst. De operator wordt omhuld door de puntige
>>...<< (of de ASCII-variant
>>...<<). Met twee lijsten werkt hij element
voor element, net als zip; met een enkele waarde aan een kant wordt die
waarde over de hele lijst uitgestrekt:
say (1, 2, 3) »+» (10, 20, 30); # (11 22 33)
say (1, 2, 3) »*» 2; # (2 4 6)De twee pijlen hoeven niet dezelfde kant op te wijzen, en hun
richting bepaalt wat er gebeurt wanneer de lijsten in lengte verschillen
— een punt die naar een lijst wijst, laat die lijst
herhaald worden om bij de andere te passen. In de ASCII-notatie
<</>> zijn de vier
combinaties:
>>op<<— geen van beide kanten wordt uitgestrekt; de lijsten moeten al dezelfde lengte hebben, anders is het een fout;>>op>>— de rechter lijst wordt herhaald om bij de linker te passen;<<op<<— de linker lijst wordt herhaald om bij de rechter te passen;<<op>>— de kortere lijst wordt herhaald om bij de langere te passen.
say (1, 2, 3, 4) <<+>> (10, 20); # (11 22 13 24) — 10, 20 herhaalt tot 10, 20, 10, 20Er is ook een unaire vorm, die een methode op elk element aanroept.
>>.uc maakt elke tekenreeks in hoofdletters:
say <raku perl>>>.uc; # (RAKU PERL)Hyper-operaties geven ook aan dat het werk parallel uitgevoerd
mag worden — je zult de verwante .hyper-methode later
tegenkomen, in het gedeelte over
gelijktijdig programmeren.
Genegeerd — !
Het plaatsen van ! voor een vergelijkingsoperator
negeert het resultaat. Het bekende != (niet gelijk) is
precies deze meta-operator toegepast op ==, en hetzelfde
werkt voor andere Booleaanse operatoren zoals eq en
%%:
say 3 != 4; # True
say 'a' !eq 'b'; # True — niet gelijk als tekenreeksen
say 5 !%% 2; # True — 5 is niet deelbaar door 2Kort gezegd is $a !op $b gewoon een nettere manier om
!($a op $b) te schrijven.
Dit is opzettelijk zo. In tegenstelling tot een bewust
minimalistische taal zoals Esperanto, die streeft naar een regelmatige
manier om elk ding uit te drukken, geeft Raku je graag meerdere
mogelijkheden — dus het genegeerde !eq bestaat naast de
speciale ne-operator, en beide betekenen precies
hetzelfde:
say 'a' ne 'b'; # True — dezelfde test als 'a' !eq 'b'Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Zip-meta-operatoren | Quiz — Hyper en cross →
💪 Of ga direct naar de oefeningen in deze
sectie.