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