Zirkuläre Abhängigkeiten in Ruby

Sagen wir, wir haben zwei Klassen, Foo und Foo-Sub, jeder in einer anderen Datei foo.rb und foo_sub.rb bzw.

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

Dies ist nicht zur Arbeit zu gehen, durch die zirkuläre Abhängigkeit - können wir nicht definieren, entweder in der Klasse ohne das andere. Es gibt verschiedene Lösungen, die ich gesehen habe. Zwei von Ihnen möchte ich vermeiden - nämlich, indem man Sie in die gleiche Datei und entfernen Sie die zirkuläre Abhängigkeit. Also, die einzige andere Lösung, die ich gefunden habe, ist eine vorwärts-Deklaration:

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

Leider kann ich nicht die gleiche Sache arbeiten, wenn ich habe drei Dateien:

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

Wenn ich eine foo_sub.rb, dann FooSub ist eine nicht initialisierte Konstante in foo_sub_sub.rb. Irgendwelche Ideen wie man das umgehen kann, ohne dass Sie in der gleichen Datei noch das entfernen der zirkuläre Abhängigkeit?

  • und doch, warum nicht entfernen Sie die zirkuläre Abhängigkeit? Es ist der Hauptgrund, code wird nicht wartbar.
Schreibe einen Kommentar