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

私の知る限り、コードに大きな問題はありません。ただし、初期化されていないインスタンス変数を使用する前に、考慮すべきことが 1 つあります。var メソッドの実行時に警告をオンにすると (例: ruby -w foo.rb)、「警告: インスタンス変数 @var が初期化されていません」というメッセージが表示されます。Avdi Grimm は、「明示的に宣言して初期化する必要のないインスタンス変数の問題は、それらのスペルを非常に間違えやすいことです」( devblog.avdi.org/2011/06/23/how-ruby-helps- you-fix-your-broken-code/ )。したがって、それを考慮に入れたいと思うでしょう。

私が言及する唯一の他のことは、knutが指摘したように、ゲッターメソッドを自分で定義している場合、attr_accessorを使用する必要がないということです. attr_writer で十分です。

于 2013-08-10T19:59:55.650 に答える