2008-09-19 11 views
14

Więcej informacji z the Perl 6 Wikipedia entryJakich zastosowań można się spodziewać po skrzyżowaniach Perla 6?

odgałęźne

Perl 6 przedstawia koncepcję skrzyżowań. Wartości, które są kompozyty o innych wartościach [24] W najwcześniejszych dniach projektu Perla 6, były one nazywane "superpozycjami", analogicznie do pojęcia z zakresu fizyki kwantowej superpozycji kwantowych - kształty falowe, które mogą jednocześnie zajmować kilka stanów, aż obserwacja "zapadnie" je. Moduł Perl 5 wydany w 2000 roku przez Damiana Conwaya o nazwie Quantum :: Superpositions [25] dostarczył wstępnego dowodu koncepcji. Początkowo takie wartości superpozycyjne wydawały się zaledwie programową ciekawostką, z biegiem czasu ich użyteczność i intuicyjność zyskały powszechne uznanie, a węzły zajmują teraz centralne miejsce w projekcie Perla 6.

W swojej najprostszej formie, węzły są tworzone poprzez łączenie zestaw wartości z operatorami junctive:

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8) 
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9) 

| wskazuje wartość, która jest równa argumentom lewej lub prawej ręki. & wskazuje wartość, która jest równa zarówno jej argumentom po lewej, jak i po prawej stronie. Wartości te można stosować w dowolnym kodzie, który używałby normalnej wartości. Operacje wykonywane na skrzyżowaniu działają na wszystkich członach skrzyżowania jednakowo i łączą się zgodnie z operatorem skupiającym. Tak więc ("jabłko" | "banan") ~ "s" przyniosłoby "jabłka" | "banany". Porównując, skrzyżowania zwracają pojedynczy prawdziwy albo fałszywy wynik dla porównania. "dowolne" skrzyżowania zwracają wartość true, jeśli porównanie jest prawdziwe dla dowolnego elementu połączenia. "wszystkie" skrzyżowania zwracają wartość true, jeśli porównanie jest prawdziwe dla wszystkich elementów skrzyżowania.

Skrzyżowania mogą być również wykorzystywane do bardziej bogato poszerzyć system typu wprowadzając styl programowania generycznego, który jest ograniczony do skrzyżowania typów:

sub get_tint (RGB_Color|CMYK_Color $color, num $opacity) { ... } 
sub store_record (Record&Storable $rec) { ... } 

Odpowiedz

11

ile dni w danym miesiącu?

given($month){ 
    when any(qw'1 3 5 7 8 10 12') { 
    $day = 31 
    } 
    when any(qw'4 6 9 11') { 
    $day = 30 
    } 
    when 2 { 
    $day = 29 
    } 
} 
+0

Mogłem też użyć 'one()' zamiast 'any()', ale 'any()' prawdopodobnie byłby szybszy. –

+0

Właściwie w lutym sprawa może powinienem był zwrócić jeden (28,29); –

6

Najbardziej atrakcyjną cechą skrzyżowań jest to, że nie trzeba pisać wielu testów kodu w skomplikowanych sytuacjach. Opisujesz sytuację za pomocą skrzyżowań, a następnie stosujesz test. Nie myślisz o tym, jak uzyskujesz odpowiedź (na przykład, używając operatorów zwarciowych lub bloków), ale zadajesz sobie pytanie.

+3

Byłbym wdzięczny za przykład tego, co masz na myśli. – jettero

+0

Ditto! Podaj przykład dotyczący świata rzeczywistego. – kevinarpe

5

Autoodczytanie brzmi fajnie, chociaż nie wiem, jaki jest jego aktualny stan.

for all(@files) -> $file { 
    do_something($file); 
} 

Skrzyżowania nie kolejności, tak VM swobodnie tarło wątku dla każdego elementu w @files i przetwarza je wszystkie jednocześnie.

Powiązane problemy