我正在尝试创建一个简单的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}
但是每次创建一个新的哈希只有一个我不想要的值。有人可以告诉我我做错了吗?
答案 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