On 5/2/07, Ball, Donald A Jr (Library) <donald.ball / nashville.gov> wrote:
> Okay, so maybe this turns out to be a not-so-simple subclass question
> after all. I appreciate all the thoughtful answers and links, I'm pretty
> close to wrapping my head around it all. I'm still having trouble with
> class instance variable initialization, and have come up with code
> sample which should illustrate the point:
>
> class Breakfast
>   def self.add_food(*args)
>     @foods ||= []
just initialize @foods in the class

class Breakfast
    @foods = []  # class instance variable, I did this in my original example
                         # because of (1)
    def self.add_food( *args)
          @foods += args
    end

    ......
<snip>
> Everybody loves breakfast, right? This code works great, except... maybe
> I don't want Breakfast to have :eggs by default, but if I remove the
> add_food :eggs from Breakfast, then Breakfast.foods returns nil instead
> of [] since @foods isn't initialized until add_food is called, and
> RubyBreakfast.foods throws an exception trying to its delicious foods
> array to nil. But I'll be damned if I can figure out how to properly
> initialize @foods in Breakfast. Can someone point me in the proper
> direction?
Hopefully I did, if not continue asking I am a bad teacher, I know :(.

(1)

class A
    @cl_inst_var = 42
end

is the same (unless class A has been defined before) as

A = Class.new { @cl_inst_var = 42 }

Cheers
Robert


-- 
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw