Круговые зависимости в Ruby

Допустим, у нас есть два класса, 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. Любые идеи, как обойти это, не помещая их в тот же файл, ни удаляя циклическую зависимость?

Ответы на вопрос(3)

Ваш ответ на вопрос