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) { ... }
Mogłem też użyć 'one()' zamiast 'any()', ale 'any()' prawdopodobnie byłby szybszy. –
Właściwie w lutym sprawa może powinienem był zwrócić jeden (28,29); –