2017-08-09 8 views
0

いくつかの属性を読み込み専用にするか、書き込み可能で読みやすいようにしたいのですが、属性を書き込み可能にして読み込めないようにしたい場合は想像できます。いつattr_writerを使用しますか?

場合によっては、一部の属性を読み込み、変更できないことがあります。あなたがAnimalクラスを持っているし、名前、年齢、色でそれを初期化したい場合たとえば、あなたは

attr_accessor :age, :color 

を書くことができ、名前は「doesnのため、名前のために

attr_reader :name 

を持っていますt変化。猫は年を取ったり色を変えたりすることができますが、一度割り当てられた名前は変更しないでください。

一方、attr_writerattr_accessorまたはattr_readerではなく)が必要なシナリオ(フォームパスワード以外)を合理化することはできません。どんな状況下で何かを書こうと思っていますが、それを読んでみたくないですか? attr_writerはどんな種類のシナリオや状況が必要ですか?

他のプログラミング言語でもシナリオを考えることができますが、それは歓迎しますが、私の直接の対象指向知識の範囲はRuby内です。

+2

自分でゲッターを提供していた場合、私は 'attr_writer'を使用します。 – Stefan

+1

多分少し工夫しましたが、getterのない 'attr_writer'のために、私は[Bulls and Cows]のRuby版(https://en.wikipedia.org/wiki/Bulls_and_Cows)を想像することができました。ゲームオブジェクトは、あるプレーヤーが 'game.code ='を通してコードを(秘密に)設定することを許しますが、相手が 'game.code 'を通して簡単に入手することを許しません。 – Stefan

答えて

1

簡単なライターとカスタムリーダーが必要な場合はどうなりますか? ivarがまだ設定されていない場合、リーダーを呼び出すときにデフォルト値をメモすることが一般的です。

class Oof 
    attr_writer :rab 

    def rab 
    @rab ||= "rab, of course!" 
    end 
end 

oof = Oof.new 
oof.rab # => "rab, of course!" 
oof.rab = "zab" 
oof.rab # => "zab" 
+1

これはまさにそのケースです。 – sawa

+0

ありがとうございました!私は教師の一人に話しました。彼はパスワードについて書いていましたが、プログラマはそれを見ることができませんでしたが、私は間違いなくこの例を彼と一緒に持ち出すでしょう! –

+0

@ M.C。ゲッターを省略すると、インスタンス変数の値を取得するのが簡便になりますが、まだ(簡単に)可能です。 – Stefan

関連する問題