From: "Jesús Gabriel y Galán" Date: 2008-09-02T21:58:42+09:00 Subject: Re: About class variable question? On Tue, Sep 2, 2008 at 2:46 PM, Zhao Yi wrote: > Stefano Crocco wrote: >> On Tuesday 02 September 2008, Zhao Yi wrote: >>> h.say >> @name is an instance variable of the Hello object, not of instances of >> Hello, >> such as h. To create an instance variable of instances of Hello, you >> need to >> assign it a value in an instance method. Usually, this is done in the >> initialize method: >> >> class Hello >> >> def initialize >> @name = "Hello" >> end >> >> def say >> puts "Hello" + @name >> end >> >> end >> >> h = Hello.new >> h.say >> >> I hope this helps >> >> Stefano > > If the name is Hello object instance, it should be accessed by Hello > object, right? see this code: > > class Hello > @name="world" > > def name > @name > end > end > h=Hello.new > puts h.name > > It will print "nil" which means the first line of this class > @name="world" is ignored. > Am I right? It's not ignored. When you see @name="something", you have to think which object is self at that point. That object will have an instance variable called @name with that value. The thing is that classes are also objects (instances of class Class), and can have instance variables as any other object. This: class Hello @name = "hello's name" end creates an instance variable of the object Hello. To achieve what you want you need to do as Stefano showed: create the @name instance variable in a place where self is the instance of the Hello class: inside a method, like initialize. Jesus.