From: Jos Backus Date: 2004-12-02T16:21:04+09:00 Subject: Re: Accessing class constants from within a module? On Thu, Dec 02, 2004 at 01:56:49PM +0900, Michael C. Libby wrote: > You probably don't want to do that anyway. If you change to Debug::DEBUG > in the class definitions, you'll be modifying a constant which can only > have one value at a time. You want two different values (and you can't > really tell the module to figure out which class constant is which > without a lot of headaches), so maybe just set it as a default instance > variable in your new objects? Joel's solution was what I was looking for originally (thanks Joel!) but your solution admittedly works well too. Thanks for that, Michael. Another approach I tried was using a class variable but that doesn't work either, presumably because it is likewise trying to find @@debug in Debug, not the including class: lizzy:~% cat n module Debug def debug(level, msg) puts msg unless level > @@debug end end class C1 @@debug = 1 include Debug def foo debug(1, "this is foo") end end class C2 @@debug = 1 include Debug def bar debug(2, "this is bar") end end C1.new.foo C2.new.bar lizzy:~% ruby n n:3:in `debug': uninitialized class variable @@debug in Debug (NameError) from n:11:in `foo' from n:23 lizzy:~% Cheers, -- Jos Backus _/ _/_/_/ Sunnyvale, CA _/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ jos at catnook.com _/_/ _/_/_/ require 'std/disclaimer'