2010-10-18 5 views
12

Nella sintesi di differences tra Perl 5 e Perl 6, va notato che la funzione wantarray è andato:Come posso restituire valori di ritorno sensibili al contesto in Perl 6?

wantarray() è andato

wantarray è andato. In Perl 6, contesto scorre verso l'esterno, il che significa che una routine non sa quale contesto è.

Invece si dovrebbe restituire gli oggetti che fanno la cosa giusta in ogni contesto.

Qualcuno potrebbe fornire un esempio di come viene creato tale oggetto?

risposta

4

Penso 2 esempi potrebbero essere:


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

Una classe può definire i metodi che consentono di rispondere, come se si trattasse di una routine, un array o hash. Le lunghe forme sono i seguenti:

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

Quelli sono un po 'ingombrante, quindi si può anche utilizzare queste forme brevi:

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

Inoltre, credo che questo potrebbe essere rilevante anche se meno: http://perlcabal.org/syn/S12.html

Se arch per:

È possibile scrivere i propri metodi di accesso per sovrascrivere uno o tutti quelli generati automaticamente.

Quindi si restituisce un oggetto che dispone di diversi accessori specifici del contesto.


Abbastanza interessante, è iniziato con Perl6 sostituendo "wantarray" con un generico "volere": RFC 98 (v1) context-based method overloading, circa 2000, anche http://dev.perl.org/perl6/rfc/21.html. Non sono sicuro del perché/quando è stata apportata la modifica.

2

Questo comment su Reddit circa il post sul blog Immutable Sigils and Context dà i seguenti esempi:

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'; 
} 
Problemi correlati