Полагаю, вы пишете сценарии в OCaml.Тогда Sys.argv. (0) - самый простой способ получить имя скрипта.Модуль Sys также предоставляет имя Sys.executable_name, но его семантика немного отличается:
let _ = prerr_endline Sys.executable_name;Array.iter prerr_endline Sys.argv ;;
Если я запусту указанную выше строку, поместив строку в test.ml с помощью ocaml test.ml hello world, у меня будет:
/usr/local/bin/ocaml - executable_name
test.ml - argv.(0)
hello - argv.(1)
world - argv.(2)
Поэтому OCaml toplevel делает что-то необычное для argv.
В общем, получить текущее имя модуля в OCaml непросто по нескольким причинам:
- Модули ML настолько гибки, чтоони могут быть псевдонимами, включаться в другие модули и применяться к функторам модулей.
- OCaml не встраивает имя модуля в свой объектный файл.
Один из возможных возможных способов - добавитьпеременная для имени модуля самостоятельно, например:
let ml_source_name = "foobar.ml"
Это определение может быть автоматически вставлено при некоторой предварительной обработке.Однако я не уверен, что CamlP4 может иметь имя файла исходного обрабатываемого файла.
Если ваша основная цель - простые сценарии, то, конечно, эта предварительная обработка слишком сложна, я боюсь.