ruby - 卡住对象中的内存方法

标签 ruby

我正在使用抽象语法树,其中每个顶点都是 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/

相关文章:

javascript - 将 Middleman 数据文件夹中的 JSON 文件解析为 Javascript 文件作为数组

ruby - 如何扫描带有 unicode 字符的 ruby​​ 字符串?

ruby-on-rails - Ruby:解析、替换和评估字符串公式

ruby-on-rails - 使用 Rails Assets 管道在 JavaScript 文件中编码问题

ruby - 如何使用 Ruby 检查域是否存在?

ruby-on-rails - ruby on rails 模型验证中的浮点精度

mysql - 在开发环境中使用Mysql原生函数和ActiveRecord

ruby-on-rails - Ruby 数组插入神秘字符

ruby-on-rails - rails : can't run app because "An error occured while installing json (1.7.7)"

ruby - 什么是 Ruby File.open 模式和选项?