2010-12-17 14 views
5

Czy istnieje jakieś słowo kluczowe, takie jak this, aby odnieść się do bieżącego modułu? Na przykład, co mam tu wstawić:Odniesienie do modułu bieżącego w OCaml

module Test: Test_Type = 
struct 

    module N = Test_Outside(___);; 

end;; 

Gdzie Test_Outside to kolejny moduł sparametryzowany przez Test_Type.

Odpowiedz

5

Nie, nie ma, ale jest to dziwne, czego potrzebujesz.

Możliwe, że będziesz w stanie wykonywać dziwne sztuczki z modułami rekursywnymi (rozszerzenie języka bazowego), ale najprawdopodobniej problem leży w sposobie formułowania rzeczy i nie potrzebujesz takiej samo-referencji.

Zobacz manual for recursive modules

Z mojego doświadczenia wynika, przechodząc rekurencyjnej trasy zawsze będzie problem w końcu. Powinieneś raczej poświęcić czas na uproszczenie projektu i złamanie dowolnego cyklu zależności za pomocą bardziej warstwowego podejścia. Na przykład tutaj chcesz, aby N był zdefiniowany w teście i jednocześnie aby odnosić się do testu. Ale czy moduł Test_Outside musi wiedzieć o N i innych częściach Testu używając N, czy raczej używa tylko "podstawowych" definicji Testu, które są "przed N"? Możesz użyć dwóch oddzielnych modułów "Test", z drugim rozszerzając pierwszy:

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