2008-09-19 10 views
14

Más información de the Perl 6 Wikipedia entry¿Qué usos se te ocurren para las uniones de Perl 6?

Junctions

Perl 6 introduce el concepto de uniones:. Valores que son materiales compuestos de otros valores [24] En los primeros días del diseño de Perl 6, estos fueron llamados "superposiciones", por analogía al concepto en física cuántica de superposiciones cuánticas, formas de onda que pueden ocupar simultáneamente varios estados hasta que la observación los "colapse". Un módulo de Perl 5 lanzado en 2000 por Damian Conway llamado Quantum :: Superpositions [25] proporcionó una prueba inicial del concepto. Si bien al principio, tales valores superpositivos parecían meramente una curiosidad programática, con el tiempo su utilidad e intuición se volvieron ampliamente reconocidas, y las uniones ahora ocupan un lugar central en el diseño de Perl 6.

En su forma más simple, las uniones se crean mediante la combinación de un conjunto de valores con los operadores 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) 

| indica un valor que es igual a sus argumentos izquierdo o derecho. & indica un valor que es igual a sus argumentos a la izquierda y a la derecha. Estos valores se pueden usar en cualquier código que use un valor normal. Las operaciones realizadas en una unión actúan sobre todos los miembros de la unión por igual, y se combinan de acuerdo con el operador junctive. Entonces, ("manzana" | "plátano") ~ "s" produciría "manzanas" | "plátanos". En las comparaciones, las uniones arrojan un único resultado verdadero o falso para la comparación. "cualquier" unión devuelve verdadero si la comparación es verdadera para cualquiera de los elementos de la unión. "todas" las uniones devuelven verdadero si la comparación es verdadera para todos los elementos de la unión.

uniones también se pueden utilizar para aumentar más ricamente el sistema de tipos mediante la introducción de un estilo de programación genérica que está limitado a los cruces de los tipos:

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

Respuesta

11

¿Cuántos días hay en un mes determinado?

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

Pude haber usado 'one()' en lugar de 'any()', pero 'any()' probablemente sería más rápido. –

+0

En realidad para el caso de febrero, tal vez debería haber devuelto uno (28,29); –

6

La característica más atractiva de las uniones es que no es necesario escribir un montón de código de prueba para situaciones complejas. Usted describe la situación con las uniones, luego aplica la prueba. No piensas en cómo obtienes la respuesta (por ejemplo, usando operadores de cortocircuito o bloques) pero qué pregunta estás haciendo.

+3

Agradecería un ejemplo de lo que quiere decir aquí. – jettero

+0

¡Lo mismo! Proporcione un ejemplo del mundo real. – kevinarpe

5

La autotracción suena genial, aunque no sé cuál es su estado actual.

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

uniones no tienen un orden, por lo que el VM es libre para desovar un hilo para cada elemento en @files y todos ellos procesar en paralelo.

Cuestiones relacionadas