Jesús Gabriel y Galán
9/2/2008 12:59:00 PM
On Tue, Sep 2, 2008 at 2:46 PM, Zhao Yi <youhaodeyi@gmail.com> 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.