В Ocaml нет понятия основного модуля. Все модули в программе равны. Таким образом, вы не можете напрямую перевести эту идиому Python.
Обычный способ в Ocaml - иметь отдельный файл, содержащий вызов main
, а также другие вещи, такие как анализ командной строки, которые имеют смысл только в автономном исполняемом файле. Не включайте этот исходный файл при компоновке вашего кода в виде библиотеки.
Существует способ узнать имя модуля, но он довольно хакерский, поскольку предназначен только для отладки. Это нарушает обычное предположение, что вы можете переименовать модуль без изменения его поведения. Если вы полагаетесь на это, другие программисты, читающие ваш код, будут вас проклинать. Этот метод предназначен только для развлекательных целей и не должен использоваться в реальной жизни.
let name_of_this_compilation_unit =
try assert false with Assert_failure (filename, _, _) -> filename
Вы можете сравнить название модуля компиляции с Sys.executable_name
или Sys.argv.(0)
. Обратите внимание, что на самом деле это не то же самое, что идиома Python, которая не использует скрипт верхнего уровня с конкретным именем.