Переменная экземпляра класса идет как `nil` в методе экземпляра

Я назначил переменную экземпляра класса в виде массива.

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

Если я получаю доступ к экземпляру класса, он возвращает nil, Что здесь происходит?

1 ответ

Решение

["brinjal", "banana"] в @items из Red, Class объект.

nil в @items из p, Red объект.

Если вы измените все свои @ в @@, это будет работать, так как они всегда на уровне класса. Или вы можете использовать аксессор на уровне класса:

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
Другие вопросы по тегам