我有一个实例变量,如果请求时它是nil,我想设置它。这样的事情是正确的,还是会引起问题呢?
class Something
attr_accessor :var
def initialize
@var
end
def var
if @var == nil
#Something which determines a value for var
end
@var
end
end
答案 0 :(得分:3)
class Something
attr_writer :var
def initialize
@var
end
def var
@var ||= 12
end
end
foo = Something.new
foo.var
# => 12
foo.var = 15
foo.var
# => 15
答案 1 :(得分:1)
据我所知,您的代码不会出现任何重大问题。在使用未初始化的实例变量之前,您可能需要考虑一件事。如果在执行var方法时打开警告(例如ruby -w foo.rb
),则会出现“警告:实例变量@var未初始化”。 Avdi Grimm指出“不需要显式声明和初始化的实例变量的问题在于它很容易拼错它们”(devblog.avdi.org/2011/06/23/how-ruby-helps-you-fix-your-broken-code/)。因此,您需要考虑这一点。
我要提到的另一件事是,正如knut指出的那样,如果你自己定义getter方法,则不需要使用attr_accessor。 attr_writer就足够了。