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

···

--
Posted via http://www.ruby-forum.com/.

@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

···

On Tuesday 02 September 2008, 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

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

···

--
Posted via http://www.ruby-forum.com/\.

Stefano Crocco 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?

···

On Tuesday 02 September 2008, Zhao Yi wrote:

--
Posted via http://www.ruby-forum.com/\.

This is really different with Java at this point.

···

--
Posted via http://www.ruby-forum.com/.

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.

···

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?

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

--
Rails training from David A. Black and Ruby Power and Light:
   Intro to Ruby on Rails January 12-15 Fort Lauderdale, FL
   Advancing with Rails January 19-22 Fort Lauderdale, FL *
   * Co-taught with Patrick Ewing!
See http://www.rubypal.com for details and updates!