09/02/25 04:30:52
>>739
どうなんだろねー。delegate はあまり凝ったことできないし、ユーザデータかテーブルでしか
使えないので別の方法だろうとは思う。
思いついた方法その1 メタメソッドを使ってプロトタイプもどきを実装
・「クラス名」は文字列で保持しておく
・_get/_set のメタメソッドを使って、「クラスのメソッドテーブル」を毎回「クラス名」を使って
引いてきてメソッドはそこから引き出して使うようにする
・「クラスのメソッドテーブル」の中身を書き換えると、同種のオブジェクトのメソッドを一斉にさしかえたことになる
思いついた方法その2 弱参照でインスタンスを全部おぼえておく
・クラスはメソッドを別のテーブルとして持つ(クラスは一度インスタンス化すると書き換えできないため)
・コンストラクタでそのメソッドテーブルの内容をインスタンスに自力でコピーする
・クラスはインスタンスリストも持つ。コンストラクタでインスタンスの弱参照をリストに追加する
・メソッドを書き換えるときは、新規オブジェクト用にメソッドテーブルの中身を置き換えると同時に、
インスタンスリストに登録されてる全インスタンスの該当メソッドも置き換えてしまう
・インスタンスリストは適当なタイミングで掃除
こんなとこじゃないかなー