Ссылка на текущий модуль в OCaml - PullRequest
5 голосов
/ 18 декабря 2010

Есть ли какое-либо ключевое слово, например this, для ссылки на текущий модуль? Например, что я должен поставить в пробел здесь:

module Test: Test_Type =
struct

    module N = Test_Outside(___);;

end;;

Где Test_Outside - это другой модуль, параметризованный Test_Type.

1 Ответ

5 голосов
/ 18 декабря 2010

Нет, нет, но странно, что вам нужно.

Возможно, вы сможете делать странные трюки с рекурсивными модулями (расширение базового языка), но, скорее всего, проблема вкак вы формулируете вещи, и вам на самом деле не нужна такая самостоятельная ссылка.

См. руководство для рекурсивных модулей.всегда будет проблемой в конце.Вам лучше потратить время на упрощение проекта и нарушение цикла зависимости, используя более многоуровневый подход.Например, здесь вы хотите, чтобы N определялось в Test и в то же время указывало на Test.Но нужно ли модулю Test_Outside знать о N и других частях Test, используя N, или он скорее использует только «базовые» определения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...