【问题标题】:RUBY: how to resolve circular dependency in constant definitions?RUBY:如何解决常量定义中的循环依赖?
【发布时间】:2010-12-04 16:06:46
【问题描述】:
class A
  X = 9
  Y = B::X
end

class B
  X = 8
  Y = A::X
end

我有两个类,每个类都定义了一些常量但需要常量 从另一个如上所示,但这给了我一个错误:

circular.rb:7:in <class:A>': uninitialized constant A::B (NameError) from circular.rb:5:in'

有什么办法可以解决这个错误吗?

谢谢。

【问题讨论】:

    标签: ruby constants


    【解决方案1】:

    如果将 A 的定义分成两部分,它会起作用:

    class A
      X = 9
    end
    
    class B
      X = 8
      Y = A::X
    end
    
    class A
      Y = B::X
    end
    

    【讨论】:

    • 只是要明确一点:这里的问题,正如 sepp2k 的解决方案所示,不是你有一个循环依赖,而是你试图在定义之前使用一个常量。即使没有循环引用,您也会得到相同的效果。拆分类定义可以解决问题,因为它确保所有常量在使用之前都已定义。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 2012-03-15
    • 2016-09-21
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多