2010-12-17 10 views
5

Gibt es irgendeine Art von Schlüsselwort, wie this, um auf ein aktuelles Modul zu verweisen? Zum Beispiel, was soll ich in Spalte setze hier:Referenz auf das aktuelle Modul in OCaml

module Test: Test_Type = 
struct 

    module N = Test_Outside(___);; 

end;; 

Wo Test_Outside ein weiteres Modul von Test_Type parametriert ist.

Antwort

5

Nein, gibt es nicht, aber es ist seltsam, dass Sie müssen.

Sie können seltsame Tricks mit rekursiven Modulen (eine Erweiterung der Basissprache) machen, aber das Problem liegt wahrscheinlich in der Art und Weise, wie Sie Dinge formulieren, und Sie brauchen eine solche Selbstreferenz eigentlich nicht.

Siehe manual for recursive modules

Nach meiner Erfahrung ist der rekursive Weg geht immer würde ein Problem am Ende sein. Sie sollten sich stattdessen die Zeit nehmen, Ihr Design zu vereinfachen und einen Abhängigkeitszyklus zu durchbrechen, indem Sie einen mehrschichtigen Ansatz verwenden. Zum Beispiel möchten Sie hier, dass N in Test definiert wird und sich gleichzeitig auf Test bezieht. Aber muss das Test_Outside-Modul über N und andere Teile von Test mit N wissen, oder verwendet es eher nur die "Basis" -Definitionen von Test, die "vor N" sind? Sie können zwei separate "Test" -Module verwenden, wobei das zweite das erste erweitert:

module Test_Outside(Test : Small_Test_Type) = struct ... end 

module InnerTest : Small_Test_Type = struct ... end 

module Test : Test_type = struct 
    include InnerTest 
    module N = Test_Outside(InnerTest) 
    ... 
end