2010-10-18 7 views
12

En el resumen de differences entre Perl 5 y Perl 6, se observa que la función wantarray se ha ido:¿Cómo puedo devolver valores de retorno sensibles al contexto en Perl 6?

wantarray() se ha ido

wantarray se ha ido. En Perl 6, el contexto fluye hacia el exterior, lo que significa que una rutina no sabe qué contexto se está en .

su lugar debe devolver los objetos que hacen lo correcto en cada contexto.

¿Podría alguien dar un ejemplo de cómo se crea un objeto así?

Respuesta

4

Pienso 2 ejemplos podrían ser:


http://perlcabal.org/syn/S13.html#Type_Casting

Una clase puede definir métodos que le permiten responder como si fuera una rutina, matriz o hash. Las formas largas son las siguientes:

method postcircumfix:<()> ($capture) {...} 
method postcircumfix:<[ ]> (**@slice) {...} 
method postcircumfix:<{ }> (**@slice) {...} 

Esos son un poco difícil de manejar, por lo que también puede usar estas formas cortas:

method &.($capture) {...} 
method @.[ **@slice ] {...} 
method %.{ **@slice } {...} 

Además, creo que esta podría ser relevante aunque menos: http://perlcabal.org/syn/S12.html

Se arco para:

Puede escribir sus propios accesos para anular alguno o todos los autogenerados.

Devuelve un objeto que tiene varios descriptores de acceso específicos del contexto.


Curiosamente, se comenzó con la sustitución de Perl6 "wantarray" con un genérico "querer": RFC 98 (v1) context-based method overloading, circa 2000, también en http://dev.perl.org/perl6/rfc/21.html. No estoy seguro de por qué/cuándo se realizó el cambio.

2

Este comment en Reddit acerca de la entrada de blog Immutable Sigils and Context da los siguientes ejemplos:

class GeoLocation is Array { 
    method Str { 'middle of nowhere' } 
} 

sub remote_location { 
    return GeoLocation.new(1e6 xx 3); 
} 

# or even easier: 

sub remote_location { 
    return (1e6 xx 3) but 'middle of nowhere'; 
} 
Cuestiones relacionadas