Duncan Booth wrote: > BTW, I don't know Ruby enough to understand the example at > http://lazaridis.com/case/lang/ruby/base.html: > > class Object > def meta # adds variable "meta" to all objects in the system > end
I don't think this is valid Ruby code, by the way... It should probably be something like this: class Object attr_accessor :meta end > Talker.meta = "Class meta information" > john.meta = "Instance meta information" > 1234.meta = 'any Instance meta information" > > puts Talker.meta > puts john.meta > puts 1234.meta # an integer object > > With the above code what would 'puts someexpressionresultingin1234.meta' > output? i.e. is the attribute being set on all integers with the value > 1234, or just on a specific instance of an integer. At first glance, it seems the former is true: irb(main):021:0> class Object irb(main):022:1> attr_accessor :meta irb(main):023:1> end => nil irb(main):026:0> 1234.meta = "fred" => "fred" irb(main):027:0> (1000+234).meta => "fred" irb(main):028:0> x = 617 => 617 irb(main):029:0> x *= 2 => 1234 irb(main):031:0> x.meta => "fred" irb(main):032:0> 3.meta => nil However, inspecting the object_id (comparable to Python's id()) shows that all these refer to the same object: irb(main):035:0> 1234.object_id => 2469 irb(main):036:0> x.object_id => 2469 irb(main):041:0> y = 1000 => 1000 irb(main):042:0> y.object_id => 2001 irb(main):043:0> y += 234 => 1234 irb(main):044:0> y.object_id => 2469 I am not an expert on Ruby internals, but it looks like these integers are cached. As with Python, I don't know if one can count on this behavior to happen always. -- Hans Nowak http://zephyrfalcon.org/ -- http://mail.python.org/mailman/listinfo/python-list