2015-11-13 107 views
0

我有一個Ruby類的初始化方法:缺少`@`的實例變量

def initialize(params) 
    @foo = private_method(params || {}) 
end 

在同一個班級後來,我看到以下內容:

def new_method_for(user) 
    foo.each { |f| other_method(f) } 
end 

爲什麼是@失蹤從foo前面other_method?當我在foo.each...之前放入一個binding.pry時,foo和@foo都被定義了。

+3

你的類可能已經一個getter定義爲'@ foo'。也就是說,要麼使用訪問器定義(':attr_reader foo'或':attr_accessor foo')或顯式的'def foo'實例方法,'foo'可能被定義爲getter。你沒有顯示所有的代碼,很難說。 – lurker

+0

因爲它是'attr_accessor'或'attr_reader',並且有'foo' getter方法。 –

+0

是的,有一行'attr_reader:foo'。謝謝! – rainslg

回答

1

檢查包含new_method_for(user)方法的類,你應該看到一個attr_readerattr_writer或兩者通過attr_accessor

代表因此,它應該是這樣的:

class SomeClass 
attr_accessor :foo 

end