From: "Christopher J. Bottaro" Date: 2007-02-12T08:27:53+09:00 Subject: Re: creating/accessing class vars from modules being used as mixins? Wow, thanks for the fast response. Your solution worked perfectly. On a side note, this should definitely be in a FAQ somewhere (if it isn't already)... it's kind of a hard problem to figure out if you don't know not to look at class variables. Thanks again, -- Christopher On Feb 11, 5:16 pm, James Edward Gray II wrote: > On Feb 11, 2007, at 4:26 PM, Christopher J. Bottaro wrote: > > > I'm writing a module that is to be used as a mixin for classes. I > > cannot create or access class variables from within module methods. > > Please look at this small pastie. It contains the module definitions, > > class definitions, and some sample code that demonstrates the errors > > I'm receiving. > > Class variables have confusing inheritance rules, that I don't think > are worth learning. (They are changing in a future version of Ruby.) > > Instead, it's almost always easier to use instance variables on the > class/module itself. Your code could do this with changes like: > > module MyModule > > def self.included base > base.extend ForBase > end # def self.included > > module ForBase > > def message > @message > end > > def message=(message) > @message = message > end > > def acts_as_whatever options = {} > include MyModule::InstanceMethods > extend MyModule::ClassMethods > > if options.has_key? :message > self.message = options[:message] > else > self.message = "no message" > end > end # def acts_as_whatever > > end # module ForBase > > module InstanceMethods > > def show_message > puts self.class.message > end > > end # module InstanceMethods > > module ClassMethods > > def print_message > puts message > end > > end # module ClassMethods > > end # module MyModule > > James Edward Gray II