0

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

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

4

2 回答 2

3

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

于 2013-10-15T22:32:24.783 回答
2

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

class Dock
  def initialize()
    @ships = Hash.new(false) # <-- Define @ships as an instance variable.
  end
  def store(ship, pier)
    @ships[pier] = ship
  end
end
于 2013-10-15T22:39:45.887 回答