2014-06-11 20 views
8

uczę Perl 6, i miał problemy ze zrozumieniem Perl 6 jedno-liner poniżejRóżnica pomiędzy() i [] w Perl 6

My Perl 6 jest rakudo-star: stable 2014.04 (bottled)

To działa prawidłowo. Tablica/lista jest sortowana

[[email protected]:~] : perl6 -e 'say [2443,5,33, 90, -9, 2, 764].sort' 
-9 2 5 33 90 764 2443 

Ale to nie sortowania tablicy/listy, jeśli [].sort pracach @s.sort dlaczego nie?

[[email protected]:~] : perl6 -e 'my @s = [2443,5,33, 90, -9, 2, 764]; @s.sort.say' 
2443 5 33 90 -9 2 764 

Zmiana od [] do ()

[[email protected]:~] : perl6 -e 'my @s = (2443,5,33,90,-9,2,764); @s.sort.say' 
-9 2 5 33 90 764 2443 

UWAGA opisane zachowanie w tej kwestii nie zmieniło w tej wersji systemu perl6. Zobacz odpowiedź poniżej: G. Cito.

+1

@ FranciscoZarabozo: Perl 6 * to * Perl; to nie Perl 5 – Borodin

+3

Perl6 i Perl to różne tagi. Z perspektywy językowej Perl 5 i Perl 6 to zupełnie inne języki.Moja edycja skupiła się na usunięciu tagu 'perl' i zachowaniu tylko' perl6'. Osoby szukające tagu "perl" najprawdopodobniej nie szukają Perla 6. Do celów tagowania, 'perl' nie jest' perl6', a 'perl' jest niepowiązanym znacznikiem. –

+2

@FranciscoZarabozo: Naprawdę nie chcę, aby to zmieniło się w bitwę o ego, więc zostawię ci, abyś manipulował tagami do zawartości twojego serca, ale nie zgadzam się zdecydowanie z * "Perl 5 i Perl 6 są całkowicie różne "*. Perl 6 jest znacznie bardziej podobny do Perla 5 niż jakikolwiek inny język, ale ponieważ Perl 6 postawił roszczenie wcześniej do głównego numeru wersji, Perl 5 był zmuszony do inkrementacji mniejszego numeru wersji. Więc wersje 10 i 20 Perla 5 stały się tym, co byłoby Perlem 6 i Perlem 7, gdyby nie blokada. – Borodin

Odpowiedz

10

Dla tych, którzy mogą być mylone przez tę odpowiedź, pytanie jest o Perl 6, i nic z tego nie stosuje się do Perl 5.

rachunku

my @s = [2443, 5, 33, 90, -9, 2, 764] 

tworzy wyszczególniona tablica i przypisuje ją do @s[0], więc @s ma tylko jeden element i sortowanie jest bezcelowe.

Jednak ty może powiedzieć

@s[0].sort.say 

który posiada efekt, który oczekiwany

+0

Zrobiłem też zdumiewające drukowanie @s [0], dzięki za odpowiedź –

+0

A succint explanation +1. W perl6 różnica między listą a tablicą została bardziej wyraźna i pod pewnymi względami bardziej "spójna" (* tj. * Przypisanie do skalaru nie zwraca liczby elementów listy jak w perl5). Ta funkcja perl6 pomogła mi docenić subtelność i budowanie idiomu list w porównaniu do tablic w perl5. –

+0

@Borodin [@Ask i Dowiedz się] (http://stackoverflow.com/users/2681383/ask-and-learn) ... minęły 4 lata, ale od czasu wydania Xmas perl6 to się zmieniło. Prawdopodobnie z powodu przeróbek podczas Great List Refactor. –

3

zamierzam wychodzić na kończyny i odnoszą się do niektórych z dokumentacją cpan za Perl6 gdzie mogłoby to być postrzegane jako , tj. a sequence of values w porównaniu do (patrz doc.perl6.org).

pewnością perl6 jest na tyle różne, że uzasadnia swój tag ale to wciążperl więc nic dziwnego, że () tworzy listę i [] tworzy anonimowy tablicę.

> say [2443, 5, 33, 90, -9, 2, 764].WHAT 
(Array) 
> say (2443, 5, 33, 90, -9, 2, 764).WHAT 
(List) 

Ponieważ kwestia ta została po raz pierwszy zapytał i odpowiedział na zachowanie się zmieniło:

> my @s = [2443, 5, 33, 90, -9, 2, 764] 
> @s.sort.say 
(-9 2 5 33 90 764 2443) 

Należy pamiętać, że wyjście kiedy klasyfikowane jest List ale inaczej @s jest Array:

> @s.sort.WHAT.say 
(List) 
> @s.WHAT.say 
(Array) 
Powiązane problemy