------art_11276_9507844.1166738323093
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Seems it works perfectly fine when evaluating the string instead of block:

  class A
    @@avar  hello"
  end

  A.class_eval("puts @@avar")  # hello
  A.class_eval { puts @@avar } #throws NameError

Very interestsing, anyone could explain it?

On 12/21/06, dblack / wobblini.net <dblack / wobblini.net> wrote:
>
> Hi --
>
> On Fri, 22 Dec 2006, gwtmp01 / mac.com wrote:
>
> > I generally avoid class variables but at the last meeting of the New
> Haven
> > Ruby Brigade a simple question about them led to a long discussion and
> irb
> > session that only served to confuse us all more.
> >
> > I'm hoping someone on the list can shed some light on a couple of issues
> that
> > were raised:
> >
> >>> class A
> >>> @@avar  hello'
> >>> end
> > "hello"
> >>> A.class_variables
> > ["@@avar"]
> >>> A.class_eval { puts @@avar }
> > NameError: uninitialized class variable @@avar in Object
> >       from (irb):5
> >       from (irb):5
> >>> class A
> >>> puts @@avar
> >>> end
> > hello
> > nil
> >>> class A
> >>> def get_avar
> >>> @@avar
> >>> end
> >>> end
> > nil
> >>> a  .new
> > #<A:0x4ba360>
> >>> a.get_avar
> > "hello"
> >>>   a.instance_eval { puts @@avar }
> > NameError: uninitialized class variable @@avar in Object
> >       from (irb):16
> >       from (irb):16
> >>>
> >
> >
> > It seems like a block evaluated by class_eval should have access to  the
> > class variables. Similarly, it seems like if an instance
> method  (get_avar in
> > the example) has access to the class variable then the  variable should
> also
> > be visible via instance_eval.
> >
> > In both examples above (class_eval and instance_eval) it seems like  the
> > class variable @@avar is being looked up relative to the  top_level
> object
> > and not relative to the class and instance objects  respectively.
> >
> >
> > What am I missing?
>
> You had me at "I generally avoid class variables" :-)
>
> Here's another one you'll like:
>
>    @@avar  
>    class A
>      @@avar  hello"
>    end
>    puts @@avar  # hello
>
>    A.class_eval { puts @@avar }  # hello
>
> I love Ruby madly, but (or "therefore"? :-) I would be happy never to
> see another class variable again.  The confusingness-to-usefulness
> ratio is extremely high.
>
>
> David
>
> --
> Q. What's a good holiday present for the serious Rails developer?
> A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
>     aka The Ruby book for Rails developers!
> Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
> A. Ruby Power and Light, LLC (http://www.rubypal.com)
>
>

------art_11276_9507844.1166738323093--