当两个文件相互依赖时,如何解析常量查找?

时间:2017-04-24 06:21:36

标签: ruby-on-rails constants

我有模型AB,并且在每个模型中有两个版本的常量FooBar名称间距:

应用程序/模型/ a.rb

class A < ActiveRecord::Base
  FOO = "foo in A"
  BAR = B::FOO
end

应用程序/模型/ b.rb

class B < ActiveRecord::Base
  FOO = "foo in B"
  BAR = A::FOO
end

此处,A::BAR取决于B::FOOb.rb在文件B::BAR中定义,其定义为A::FOO,取决于a.rb ,在文件A::BAR中定义,其定义为A::BAR。但是,我可以毫无错误地致电A::BAR # => "foo in B"

A::BAR

对我来说,这看起来是循环的,我无法想象加载这两个文件的任何顺序或方式而不会陷入无限递归。

当我致电B::BAR时,如何解决常量查询?

我还发现如果我在调用A::BAR之前的一开始就调用a.rb,那么它会引发错误,这表明文件名b.rb的字母顺序和A::BAR与此问题有关。这也提出了一个问题:如果文件加载是由持续分辨率触发的,那么文件之间的这种顺序应该无关紧要。另一方面,如果在调用这些常量之前加载文件,那么首先调用B::BAR还是先调用class A < ActiveRecord::Base BAR = B::FOO FOO = "foo in A" end 无关紧要。这是怎么回事?

我还发现,如果我将定义的顺序更改为以下内容,

应用程序/模型/ a.rb

class B < ActiveRecord::Base
  BAR = A::FOO
  FOO = "foo in B"
end

应用程序/模型/ b.rb

A::BAR

然后先调用B::BAR或先调用TIMESTAMP WITH TIME ZONE会引发错误。我想知道这是如何相关的。

0 个答案:

没有答案
相关问题