[libxml-devel] << operator

Charlie Savage cfis at savagexi.com
Thu Aug 21 15:44:15 EDT 2008



>>> A contrived example, but this code absolutely irritates the shit out 
>>> of me:
>>> Class F
>>>  def a=(b)
>>>    @z = b + 1
>>>    return @z
>>>  end
>>>  def a
>>>    return @z
>>>  end
>>> end
>>> f = F.new
>>> x = f.a = 1
>>> p f.a  # Prints 2
>>> p x    # Prints 1
>>
>> That's bizarre.  What is going on there?  Print statement show that 
>> def a= is called before def a, so can x ever be set to 1?
> 
> 
> It's an "optimization".  The rvalue of an assignment is the argument to 
> all lvalues in an assignment statement.  i.e.: x = f.a = 1 is translated 
> into "x = 1 ; f.a = 1".  I think that was a very bad decision, but oh 
> well.  Ruby ain't perfect and this, to me at least, is perfect 
> justification for doing what is right vs. what is "standard."  -sc

Ah.  That is silly.

Charlie
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://rubyforge.org/pipermail/libxml-devel/attachments/20080821/5d02fac7/attachment.bin>


More information about the libxml-devel mailing list