私はruby 1.8.6を使用しています(そこには行かないでください)。私は結果と呼ばれる配列を持っているとしましょう:新しいメソッド "current_page"に応答したいだけです。これは単に数値を返します。Ruby:オブジェクトにメソッドを追加して単純な数値を返す
私は、この値がなりたいものを設定した場合ので、同じように、私は、ローカル変数にそれを持っている:私はmy_array.current_page
を呼び出す場合、私は戻って3を得るように、私の配列を変更したい
page = 3
、または私のローカル変数page
に保持されている値になることが起こります。
これを行うにはどうすれば最も簡単ですか?これが評価されるとき、@page
の周りではないかもしれない、
@page = page
def my_array.current_page
@page
end
しかし:私はこれを試してみました。 @pageの現在の値が何であれ、返すメソッドを「ハードコード」に並べ替える必要があります。
すべての配列オブジェクトで異なる必要があるため、クラスメソッドを設定することはできません。
私は、Arrayクラスにattr_accessorフィールドを追加し、それを設定するのが最善の方法かもしれないと私には思った:my_arrayオブジェクトがクラスを変更する前にインスタンス化されていたので、しかし、それはうまくいくようです:
class Array; attr_accessor :current_page; end
my_array.current_page = page
my_array.current_page
=> 3
これは実際に動作しているようです。しかし、それは一番良い方法ですか?私のコードの中でArrayをMonkeypatchingするのはかなり恐ろしいことです。あなただけのmy_array
このようなモンキーパッチができ
を、なぜあなたは最初の場所で'アレイ#1 current_page'を呼び出すようにしようとしていますか?オリジナルの配列を含むようにいくつかのラッパーオブジェクトを定義することはできませんか? –
最も良い方法は、@ TomLordのようにラッパーを作成することです。これにより、ネイティブ配列からページ分割の問題を分離することができ、複雑さが拡大した場合に柔軟性が向上します – engineersmnky