无法在类中创建Ruby哈希

时间:2013-10-15 22:31:32

标签: ruby

我正在尝试创建一个简单的Ruby类,但我遇到了困难。这是我的代码:

#!/usr/bin/ruby
class Dock

 @ships = Hash.new(false) 

 def initialize()
 end

 def store(ship, pier)
    @ships[pier] = ship
 end

end

yathi = Dock.new
yathi.store("test", 12)

但是当我尝试通过在终端中运行它来运行它时:

ruby test.rb 

这是我收到的错误消息:

test.rb:8:in `'store': undefined method `'[]=' for nil:NilClass (NoMethodError)
    from test.rb:13

如果我像这样重写它,它确实有效:

@ships = {pier => ship}

但是每次创建一个新的哈希只有一个我不想要的值。有人可以告诉我我做错了吗?

2 个答案:

答案 0 :(得分:3)

@ships = Hash.new(false)放在initialize方法中。当你把它放在initialize方法之外时,你正在定义一个类级实例变量。如果您想了解更多信息,请查看this。{/ p>

答案 1 :(得分:2)

尝试初始化“initialize”方法中的哈希,使其成为Dock类的实例的成员,而不是 Dock类本身的成员:< / p>

class Dock
  def initialize()
    @ships = Hash.new(false) # <-- Define @ships as an instance variable.
  end
  def store(ship, pier)
    @ships[pier] = ship
  end
end