develooper Front page | perl.perl6.language | Postings from June 2005

Re: Assigning Proxy objects

Thread Previous
From:
Larry Wall
Date:
June 14, 2005 09:49
Subject:
Re: Assigning Proxy objects
On Tue, Jun 14, 2005 at 12:33:34PM +0000, Ingo Blechschmidt wrote:
: Hi, 
:  
:   sub proxy () is rw { 
:     return new Proxy: 
:       FETCH => { 42 }, 
:       STORE => -> $new { 23 }; 
:   } 
:  
:   say proxy();        # 42 
:   say proxy() = 40;   # 40, 23, or 42? 
:  
: Currently I think the last line should output 40, consider: 
:  
:   sub innocent_sub ($var is copy) { 
:     my $foo = ($var = 40); 
:     # Do something with $foo, relying on $foo being 40. 
:   } 
:  
:   { my $x = "does not matter"; innocent_sub $x } 
:   # Works 
:  
:   { my $x := proxy(); innocent_sub $x } 
:   # Would break if (proxy() = 40) would not return 40. 
:  
: But I can argue that the return value of Proxy object should 
: be the return value of the code given by FETCH in the Proxy 
: object construction, too... 
:  
: Opinions? 

The intention is that lvalue subs behave in all respects as if they
were variables.  So consider what

    say $nonproxy = 40;

should do.  This also extends to other operations than assignment:

    temp $foo.bar() = 40;

or the very-nearly-Software-Transactional-Memory-oriented:

    let $object.attribute() = 40;	# hope this sticks...

Larry

Thread Previous


Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About