我正在使用抽象语法树,其中每个顶点都是 Node
类的子类。该基类在第三方库中定义,Node
对象在构建时被卡住。
现在我正在执行一些遍历树的昂贵操作,有时是递归的,并且想记住这些操作的结果。下面是此类子类的示例,以及使用“经典”Ruby 模式内存的操作结果:
class DefNode < Node
def visibility_scope
@visibility_scope ||= VisibilityScopeResolver.new(self).resolve
end
end
但是,由于 Node
构造函数卡住了对象,尝试分配给实例变量会导致错误:
DefNode.new(children).visibility_scope
#=> RuntimeError: can't modify frozen DefNode
有没有办法(惯用地)在卡住对象中执行内存?理想情况下不要覆盖每个子类中的构造函数。
最佳答案
我不确定“惯用”,但当我去过那里时,我在类本身上使用了哈希:
class DefNode < Node
def self.visibility_scopes
@visibility_scopes ||= {}
end
def visibility_scope
self.class.visibility_scopes[__id__] ||=
VisibilityScopeResolver.new(self).resolve
end
end
关于ruby - 卡住对象中的内存方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114852/