私は、各頂点がNode
クラスのサブクラスである抽象構文ツリーを使って作業しています。この基本クラスは第三者のライブラリで定義されており、Node
オブジェクトは構築時にフリーズされます。フリーズされたオブジェクトのメソッドをメモにする
今、私はツリーを横切る高価な操作を実行しています。時には再帰的に操作し、その結果をメモしたいと思います。 Node
コンストラクタがエラーでインスタンス変数結果に代入しようと、オブジェクトをフリーズするので、
class DefNode < Node
def visibility_scope
@visibility_scope ||= VisibilityScopeResolver.new(self).resolve
end
end
しかし:以下、このようなサブクラス、及び演算結果の一例は、「古典的な」Rubyのパターンを使用してメモ化されています:
DefNode.new(children).visibility_scope
#=> RuntimeError: can't modify frozen DefNode
フリーズしたオブジェクトでメモを行う方法はありますか?理想的には、各サブクラスのコンストラクタをオーバーライドしないでください。