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
[EMAIL PROTECTED]



_______________________________________________
libxml-devel mailing list
libxml-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/libxml-devel

Reply via email to