2016-10-25 10 views
0

私は次のコードを持っている:未定義方法 '[] =':NilClass

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>' 

を私は、ルビーにはかなり新しいです私はここで何が起こっているのかは分かりません。誰にでもアイデアはありますか?

答えて

3
class Derp 
    def initialize 
    @state = Hash.new 
    end 

    def run 
    @state[:ran] = true 
    end 
end 

derp = Derp.new 
derp.run 

あなたのコードの問題は、ハッシュがDerpのオブジェクトではなく、クラスオブジェクトDerpのインスタンス変数@stateに割り当てられた点にあります。クラスのインスタンス変数は、そのクラスのオブジェクトのインスタンス変数とは異なります。クラスメソッドでその変数を使うことができます。例えば。

class Derp 
    @state = 42 

    def self.state 
    @state 
    end 
end 

puts Derp.state # 42 
+0

雷が速い!いくつかの説明は傷つけることはありません(あなたは現時点でおそらくその上にいるでしょう:) :) –

+0

ありがとう、完了:) – Ursus

+0

素早く(そして明確な)答えをありがとう! – sluther

関連する問題