Christopher J. Bottaro
2/11/2007 11:28:00 PM
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 <j...@grayproductions.net>
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