参考OCaml中的当前模块

时间:2010-12-17 22:50:43

标签: ocaml

是否有任何类型的关键字,例如this来引用当前模块?例如,我应该在这里填补空白:

module Test: Test_Type =
struct

    module N = Test_Outside(___);;

end;;

Test_Outside是Test_Type参数化的另一个模块。

1 个答案:

答案 0 :(得分:5)

不,没有,但你需要这很奇怪。

你可以用递归模块(基本语言的扩展)做一些奇怪的技巧,但很可能问题在于你制定事物的方式,而你实际上并不需要这样的自我引用。

请参阅manual for recursive modules

根据我的经验,走向递归路线最终总会成为一个问题。您应该花些时间来简化设计并通过使用更分层的方法来打破任何依赖周期。例如,在这里您希望在Test中定义N并同时引用Test。但Test_Outside模块是否需要使用N知道N和其他部分的测试,或者它是否只使用测试的“基础”定义,即“在N之前”?您可以使用两个单独的“测试”模块,第二个扩展第一个:

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