Использует ли массив как метод?
2 dwilbank [2014-03-07 02:35:00]
У меня этот класс:
class Game
attr_accessor :player_fleet, :opponent_fleet
@player_fleet = []
@opponent_fleet = []
...
end
и создайте такой экземпляр:
my_game = Game.new
затем используйте его следующим образом:
my_game.opponent_fleet << opponent
который дает мне эту ошибку:
undefined method '<<' for nil:NilClass (NoMethodError)
Почему я не могу обработать такой массив? Должен ли я создавать метод для перемещения объектов в массив?
ruby
1 ответ
4 Решение Niklas B. [2014-03-07 02:37:00]
Вы инициализируете @opponent_fleet на уровне класса, поэтому это переменная экземпляра класса, а не созданных объектов. Помните, что в Ruby даже классы являются объектами :)
irb(main):001:0> class Game
irb(main):002:1> @foo = 3
irb(main):003:1> end
irb(main):004:0> Game.instance_eval { @foo }
=> 3
irb(main):005:0> Game.new.instance_eval { @foo }
=> nil
Вместо этого вы хотите инициализировать его в конструкторе:
class Game
attr_accessor :player_fleet, :opponent_fleet
def initialize
@player_fleet = []
@opponent_fleet = []
end
end