2010-12-17 7 views
5

¿Hay algún tipo de palabra clave, como this, para referirse a un módulo actual? Por ejemplo, ¿qué debo poner en Gap aquí:Referencia al módulo actual en OCaml

module Test: Test_Type = 
struct 

    module N = Test_Outside(___);; 

end;; 

Dónde Test_Outside es otro módulo parametrizado por test_type.

Respuesta

5

No, no lo hay, pero es extraño que lo necesites.

Es posible que pueda hacer trucos extraños con módulos recursivos (una extensión del lenguaje base), pero lo más probable es que el problema radique en la forma en que formula las cosas, y realmente no necesita dicha autorreferencia.

Véase el manual for recursive modules

En mi experiencia, va por la ruta recursiva está siempre va a ser un problema en el final. Debería tomarse un tiempo para simplificar su diseño y romper cualquier ciclo de dependencia utilizando un enfoque más estratificado. Por ejemplo, aquí quiere que N se defina en Prueba y al mismo tiempo que se refiera a Prueba. Pero, ¿el módulo Test_Outside necesita saber acerca de N y otras partes de Test utilizando N, o prefiere usar las definiciones "base" de Test, que son "antes de N"? Puede usar dos módulos de "Prueba" separados, y el segundo extender el primero:

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 
Cuestiones relacionadas