ruby - 可以使用数组作为方法吗?

标签 ruby

我有这门课:

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/

相关文章:

ruby-on-rails - 隐藏复选框和分配值 - Ruby on Rails - 简单问题

ruby-on-rails - 为嵌套路由包装命名路由助手

ruby - 停止分布式 Ruby 服务

ruby - Mongoid:如何实现嵌入式文档之间的关系?

ruby - 为什么当我调用类的实例方法时,初始化不显示为方法?

ruby - 在 ruby​​ 中将 csv 转换为 json

ruby-on-rails - 取消 Rails 数据库连接

java - 管理 Rails 和 Java 项目之间的数据库更改

css - Font Awesome 不加载图标 - Rails 4

mysql - Rails 不等于 current_user 总是没有结果