私はRailsアプリケーションを持っており、デフォルト属性を設定する必要があります。時には、ユーザーは、尊重される属性の値を提供することがありますが、モデルやユーザーは、これらの属性が元の値を無視した既定値で上書きされることを望む場合もあります。デフォルトの属性アクセサーを作成する
この問題は、ユーザーとプログラムが適切な状態に切り替えることを可能にするデフォルト値を設定するために、打ち切られた(!
)メソッドと非打ち込みメソッドを必要としていたと推測しました。 non-banged setterは、デフォルト値を設定します.nilでないときはデフォルト値を設定し、bangedバージョンは常にデフォルト値で属性を上書きします。違いは軽微です:
class BangDiBang
attr_accessor :value
def set_default
self.value ||= do_some_suff_to_determine_default_value
end
def set_default!
self.value = do_some_suff_to_determine_default_value
end
...
end
このコードの問題は、私が設定する変数の束を持っていた場合、私は、各変数のために二度同じコードを繰り返して終わるだろうということです。
私の質問は、このコードをどのように部分的にするかです。 1つの方法で論理を保存し、2つの方法を有するset_value
およびset_value!
異なる割り当て演算子で中央ロジックを呼び出す。
私は1つの解決策を思いつきました:テキストとして中央ロジックを書き、セッターメソッドから代入演算を置き換えて評価します(しかし、これは正しいとは思いません)。どうやって自分を繰り返さないの?
あなたがそれを必要とするあらゆる場所に関心を持ち、それらを含めるのはどうですか? – Severin