无法在类内创建Ruby哈希
我试图创建一个简单的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 这
#!/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。