任意のデータのセルをラップしているクラスがあります。一種のフィルター。セルはバックエンドデータストアに存在します。しかし、それは可能な限り透明でなければなりません。
簡単なアクセサーの作成は非常に簡単です。
def foo
# fetch backend cell value and return it
end
def foo=(val)
# store val in backend cell
end
私がトリッキーだと思っているのは、データがラップされていない場合に通常はデータに影響を与えるメソッドを傍受して追跡することです。たとえば、データが配列の場合、その場obj.foo << 17
で配列に要素を追加します。バックエンドに保存されているデータでその動作を維持したい(つまり、保存された値に要素も追加される)。私はおそらく助けになると思いました:obj.foo << 17
method_missing
def method_missing(meth, *args)
methsym = meth.to_sym
curval = self.get
lastval = curval.clone
opresult = curval.__send__(methsym, *args)
if (curval != lastval)
self.set(curval)
end
return opresult
end
しかし、リーダーアクセサーと組み合わせることで、操作の制御は私を超えて移動しました。これは、返されるものがそれ自体ではないためです。(つまり、バックエンドデータが配列の場合、そのコピーを返します。変更されて返送されることのないコピーです。)
これは可能ですか?もしそうなら、どうすればそれを行うことができますか?(それはおそらく痛々しいほど明白であり、私は疲れているのでそれを見逃しているだけです-または多分そうではありません。:-)
ありがとう!
[編集]
別の言い方 #method_missing
をすれば、未知のメソッドの呼び出しプロセスにフックすることができます。同様に呼び出しプロセスにフックする方法を探していますが、既知および未知のすべてのメソッドについてです。
ありがとう!