-1

I assigned a class instance variable as an array.

class Red
  @items = ["brinjal", "banana"]
  puts @items.inspect 
  def test
    puts @items.inspect
  end
end

p = Red.new # => prints ["brinjal", "banana"]
p.test # => prints nil

If I access an instance of the class, it returns nil. What is happening here?

sawa
  • 165,429
  • 45
  • 277
  • 381

1 Answers1

0

["brinjal", "banana"] is in @items of Red, a Class object.

nil is in @items of p, a Red object.

If you change all of your @ to @@, it will work, as those are always class-level. Or you could use a class-level accessor:

class Red
  class << self
    attr_accessor :items
  end
  @items=[]
  @items<<"brinjal"
  @items<<"banana"
  puts items.inspect
  def test
    puts self.class.items.inspect
  end
end
Amadan
  • 191,408
  • 23
  • 240
  • 301