对OCaml中当前模块的引用

对OCaml中当前模块的引用,ocaml,Ocaml,是否有任何类型的关键字(如this)可以引用当前模块?例如,我应该在gap中添加什么: module Test: Test_Type = struct module N = Test_Outside(___);; end;; 其中Test_Outside是由Test_类型参数化的另一个模块 不,没有,但奇怪的是你需要 您可能可以使用递归模块(对基础语言的扩展)执行一些奇怪的操作,但问题很可能在于您制定事情的方式,实际上您不需要这样的自引用 见 根据我的经验,走递归路线最终总是一个问

是否有任何类型的关键字(如
this
)可以引用当前模块?例如,我应该在gap中添加什么:

module Test: Test_Type =
struct

    module N = Test_Outside(___);;

end;;

其中Test_Outside是由Test_类型参数化的另一个模块

不,没有,但奇怪的是你需要

您可能可以使用递归模块(对基础语言的扩展)执行一些奇怪的操作,但问题很可能在于您制定事情的方式,实际上您不需要这样的自引用

根据我的经验,走递归路线最终总是一个问题。您应该花时间简化设计,并通过使用更分层的方法打破任何依赖循环。例如,这里您希望在Test中定义N,同时引用Test。但是模块外的Test_是否需要知道N和使用N的Test的其他部分,或者它只是使用Test的“基本”定义,即“在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