0

我有一个实例变量,如果在请求时它为 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
4

2 回答 2

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
于 2013-08-10T19:02:02.560 回答
1

据我所知,您的代码不会有任何重大问题。在使用未初始化的实例变量之前,您可能需要考虑一件事。如果您在执行 var 方法时打开警告(例如ruby -w foo.rb),您将收到“警告:实例变量 @var 未初始化”。Avdi Grimm 指出“不需要显式声明和初始化的实例变量的问题在于它们很容易拼写错误”(devblog.avdi.org/2011/06/23/how-ruby-helps-你修复你的坏代码/)。因此,您需要考虑到这一点。

我要提到的唯一另一件事是,正如 knut 指出的那样,如果您自己定义 getter 方法,则无需使用 attr_accessor。attr_writer 就足够了。

于 2013-08-10T19:59:55.650 回答