假设我们有两个类,Foo 和 Foo Sub,每个类分别位于不同的文件 foo.rb 和 foo_sub.rb 中。
foo.rb:
require "foo_sub"
class Foo
def foo
FooSub.SOME_CONSTANT
end
end
foo_sub.rb:
require "foo"
class FooSub < Foo
SOME_CONSTANT = 1
end
由于循环依赖,这不会起作用——我们不能在没有另一个的情况下定义任何一个类。我见过各种解决方案。我想避免其中两个——即将它们放在同一个文件中并删除循环依赖。因此,我发现的唯一其他解决方案是前向声明:
foo.rb:
class Foo
end
require "foo_sub"
class Foo
def foo
FooSub.SOME_CONSTANT
end
end
foo_sub.rb
require "foo"
class FooSub < Foo
SOME_CONSTANT = 1
end
不幸的是,如果我有三个文件,我将无法完成相同的工作:
foo.rb:
class Foo
end
require "foo_sub_sub"
class Foo
def foo
FooSubSub.SOME_CONSTANT
end
end
foo_sub.rb:
require "foo"
class FooSub < Foo
end
foo_sub_sub.rb:
require "foo_sub"
class FooSubSub < FooSub
SOME_CONSTANT = 1
end
如果我需要 foo_sub.rb,那么 FooSub 是 foo_sub_sub.rb 中未初始化的常量。任何想法如何在不将它们放在同一个文件中或删除循环依赖的情况下解决这个问题?