我有以下代码:
class Derp
@state = Hash.new
def run
@state[:ran] = true
end
end
derp = Derp.new
derp.run
导致以下错误:
NoMethodError: undefined method `[]=' for nil:NilClass
from (irb):4:in `run'
from (irb):8
from /usr/local/bin/irb:11:in `<main>'
我对Ruby很陌生,所以我不确定这里到底发生了什么。有人有什么想法吗?
答案 0 :(得分:3)
class Derp
def initialize
@state = Hash.new
end
def run
@state[:ran] = true
end
end
derp = Derp.new
derp.run
代码中的问题在于,您将散列的方式分配给类对象Derp的实例变量@state,而不是分配给Derp的对象。该类的实例变量与该类对象的实例变量不同。您可以在类方法中使用该变量。 E.g。
class Derp
@state = 42
def self.state
@state
end
end
puts Derp.state # 42