[libxml-devel] << operator

Sean Chittenden sean at chittenden.org
Thu Aug 21 15:38:26 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


 >> class F
 >>   def a=(b)
 >>     @z = b + 1
 >>     return @z
 >>   end
 >>   def a
 >>     return @z
 >>   end
 >> end
=> nil
 >> f = F.new
=> #<F:0x399090>
 >> x = f.a = 1
=> 1
 >> x
=> 1
 >> f.a
=> 2


--
Sean Chittenden
sean at chittenden.org





More information about the libxml-devel mailing list