From: dblack@... Date: 2006-03-17T10:13:26+09:00 Subject: Re: Scope of an @variable Hi -- On Fri, 17 Mar 2006, Benjohn Barnes wrote: > > On 15 Mar 2006, at 00:54, Jeff Cohen wrote: > >> rtilley wrote: >>> This may be wrong, but I like to think of @@ as a class variable and @ >>> as a method variable. @@ is accessible by any method in the class and @ >>> is accessible by the method only. >> >> You're close. @ are instance variables. Any instance method in your >> class can >> access them. > > You can also access @ variables from a class method - ie ClassName.function; > @a_variable; end. They are local to each class within a hierarchy, rather > than @@ which would be shared among classes in the hierarchy. > > So: > > class X > def X.var; > @var > end > > def X.var=(v) > @var=v > end > end > > class Y > X.var=10 > Y.var=20 > X.var => 10 > Y.var => 20 Nice, isn't it? It's really just this: obj = Object.new def obj.var @var end def obj.var=(v) @var = v end with obj being a Class object. Plus the special-cased thing where the subclasses get to call it (because the singleton class of X is considered the superclass of the singleton class of Y). You can also do: class X class << self # singleton class of X attr_accessor :var end end David -- David A. Black (dblack@wobblini.net) Ruby Power and Light, LLC (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black