About class variable question?

Please see this code below. It will get “can’t convert nil to string
error”. Why can’t the @name be assigned? I have set the @name = “world”.

class Hello
@name=“world”
def say
puts "Hello "+@name
end
end
h=Hello.new
h.say

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

Stefano C. 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?

Zhao Yi wrote:

Please see this code below. It will get “can’t convert nil to string
error”. Why can’t the @name be assigned? I have set the @name = “world”.

class Hello
@name=“world”
def say
puts "Hello "+@name
end
end
h=Hello.new
h.say

Try it this way:

class Hello
@@name=“world”
def say
puts "Hello "+@@name
end
end
h=Hello.new

h.say

On Tue, Sep 2, 2008 at 2:46 PM, Zhao Yi [email protected] wrote:

class Hello

class Hello
@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.

This is really different with Java at this point.

HI –

On Wed, 3 Sep 2008, Zhao Yi wrote:

This is really different with Java at this point.

Yes – it’s a totally different language. Enjoy it :slight_smile:

David