无法在类内创建Ruby哈希

无法在类内创建Ruby哈希,ruby,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 这

我试图创建一个简单的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}

但这会创建一个新的哈希,每次只包含一个我不想要的值。有人能告诉我我做错了什么吗?

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

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

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

类停靠
def初始化()

@ships=Hash.new(false)#尝试在“initialize”方法中初始化哈希,使其成为Dock类实例的成员,而不是Dock类本身的成员:

类停靠
def初始化()

@ships=Hash.new(false)#就是这样!非常感谢你。现在我明白了,当我使用{}符号时,它创建了一个全新的散列,独立于我定义的初始@ships。这就做到了!非常感谢你。现在我明白了,当我使用{}符号时,它创建了一个全新的散列,独立于我定义的初始@ships。