2017-08-06 53 views
8

Dodaj jeden do skrzyżowania Ints:Dlaczego + i ~ wpływają na różne połączenia Perla 6?

put any(1, 3, 7) + 1; 

Teraz masz skrzyżowanie tych Ints wzrosły o jednym:

any(2, 4, 8) 

Więc 2 == any(2, 4, 8) jest prawdą.

Zrób skrzyżowanie ciągów i dołączyć do tych ciągów:

put any(<h H>) ~ 'amadryas'; 

uzyskać inny wynik, który nie jest równy 'Pawian' lub 'Hamadryas':

any("h", "H")amadryas 

spodziewałem się czegoś na przykład:

any('hamadryas', 'Hamadryas'); 

Jaka jest różnica w tych operacjach, która daje im inne zachowanie r chociaż powinny być podobne?

+0

Najpierw myślę, że '& infiks:« ~ »' ma kandydat ': (* @ args -> Str: D)', podczas gdy '& infix:« + »' nie. –

Odpowiedz

4

Rezultat z obserwowanym ~ jest uszeregowanym złączem poprzedzonym drugim ciągiem.

Powodem jest ~ ma kandydata slurpy, który odbywa skrzyżowaniu tylko jako arg, natomiast + nie ma takiego kandydata, a więc juncts:

<Zoffix__> m: sub foo (*@a) { @a.join: '|' }; say foo <h H>.any, 'amadryas' 
<camelia> rakudo-moar a91ad2: OUTPUT: «any("h", "H")|amadryas␤» 
<Zoffix__> m: sub foo ($a, $b) { ($a, $b).join: '|' }; say foo <h H>.any, 'amadryas' 
<camelia> rakudo-moar a91ad2: OUTPUT: «any(h|amadryas, H|amadryas)␤» 

Przynajmniej, jest to niespójne zachowanie i powinno zostać zunifikowane. Otworzyłem @LARRY bilet RT dla tego: https://rt.perl.org/Ticket/Display.html?id=131856

1

na High Sierra 10.13, umieścić nie powiedzie się z:

put any(1, 3, 7) + 1 

tego typu mogą nie unbox do natywnego wyrażenie: P6opaque, Junction w bloku na linii 1

perl6 -v 

To jest Rakudo Star wersja 2017.10 zbudowany na wersji MoarVM 2017.10 realizacji Perl 6.c.

+0

Potwierdzono i zgłoszono: https://rt.perl.org/Ticket/Display.html?id=132549 –