我有这门课:
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)
为什么我不能这样处理数组?我是否必须创建一个方法将对象插入数组?
最佳答案
您在类级别初始化@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
关于ruby - 可以使用数组作为方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238491/