2015-11-13 96 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