From: dblack@... Date: 2007-02-08T21:18:40+09:00 Subject: Re: access to constants from instance_eval Hi -- On Thu, 8 Feb 2007, David Chelimsky wrote: > Hi all, > > It seems that Ruby won't allow me to directly access class constants > from instance_eval: > > irb(main):001:0> class Foo > irb(main):002:1> BAR = "bar" > irb(main):003:1> def bar > irb(main):004:2> BAR > irb(main):005:2> end > irb(main):006:1> end > => nil > irb(main):007:0> foo = Foo.new > => # > irb(main):008:0> foo.class.constants > => ["BAR"] > irb(main):009:0> foo.bar > => "bar" > irb(main):010:0> foo.instance_eval { bar } > => "bar" > irb(main):011:0> foo.instance_eval { BAR } > NameError: uninitialized constant BAR > from (irb):11 > from (irb):11:in `instance_eval' > from (irb):11 > > Can anybody explain to me why this might be the case (is there a > philosophical reason that this is correct?) and/or some meta-magic > spell I can use to coerce instance_eval into recognizing foo's > constants? foo doesn't have any constants; only Foo does. instance_eval changes self, but it's still in the same scope. So the constants available inside the block are the same as those available outside the block. (You can see foo's instance variables, if any, inside the block, but that's because the visibility of instance variables depends on 'self'.) David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)