未定义的方法' [] ='为零:NilClass

时间:2016-10-25 20:16:45

标签: ruby

我有以下代码:

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很陌生,所以我不确定这里到底发生了什么。有人有什么想法吗?

1 个答案:

答案 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