bachase / gmail.com <bachase / gmail.com> wrote:

> Basically, I want the base class to provide
> some default settings that a child class could override using a class
> method.  Apparently, I am unclear on the way to do so.

I guess I'm wondering: does it absolutely have to be a class method?
Could it be an ordinary instance method? In this approach, as you
subclass you get to define an instance method, "setup", that you know
will be called by the constructor:

###

class BigGuy
  def setup
    @favorites = "bluto"
  end
  def initialize
    setup
    p @favorites
  end
end

class LittleGuy < BigGuy
  def setup
    @favorites = "popeye"
  end
end

BigGuy.new #=> "bluto"
LittleGuy.new #=> "popeye"
BigGuy.new #=> "bluto"
LittleGuy.new #=> "popeye"

###

If you really do want it to be class-based, perhaps a class method might
generate a subclass, set up the way you want it, from which you derive
further subclasses. I'm not very adept at this sort of thing, but my
first go would be something like this:

###

class BigGuy
  def setup
    @favorites = "bluto"
  end
  def initialize
    setup
    p @favorites
  end
  class MiddleGuy < BigGuy
  end
  def BigGuy.make_subclass(what)
    MiddleGuy.class_eval %{
      def setup
        @favorites = "#{what}"
      end
    }
    return MiddleGuy
  end
end

class LittleGuy < BigGuy.make_subclass('popeye')
end

BigGuy.new #=> "bluto"
LittleGuy.new #=> "popeye"
BigGuy.new #=> "bluto"
LittleGuy.new #=> "popeye"

###

I like the ultimate syntax used to generate LIttleGuy, but I'm not
entirely happy because it assumes that the parameter is a string. But I
got all caught up the "eval" situation and couldn't think straight any
more after a while... Maybe it was a silly idea. m.

-- 
matt neuburg, phd = matt / tidbits.com, http://www.tidbits.com/matt/
Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
AppleScript - http://www.amazon.com/gp/product/0596102119
Read TidBITS! It's free and smart. http://www.tidbits.com