[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