Это мой основной метод для OCaml от программиста, обученного в мире C.
let main () =
Printf.printf "Hello, world - %d %s\n" (Array.length Sys.argv) Sys.argv.(0)
;;
main ()
Однако этот код отлично работает с ocaml / ocamlc / ocmalopt.
Printf.printf "Hello, world - %d %s\n" (Array.length Sys.argv) Sys.argv.(0)
;;
Какая за этим логика? Является ли OCaml чем-то вроде языка сценариев (даже если он компилируется в двоичный файл с помощью ocamlc или ocamlopt) в том смысле, что ему не нужна основная функция?
По сравнению со Scala, мы можем расширять приложение, чтобы не определять основной метод.
object Hello extends App {
class A
println(new A() getClass())
print("Hello, world")
}
Даже в этом случае нам нужно иметь Hello.main(args)
при выполнении в режиме интерпретатора: то есть scala hello.scala
. OCaml, похоже, не нуждается в каких-либо изменениях в ocaml (интерпретируемый), ocamlc и ocamlopt (скомпилированный).
Итак, нужна ли нам основная функция в OCaml? Если да, то генерирует ли OCaml код от начала до конца? Если да, то как OCaml находит основной код с несколькими исходными кодами?
2 ответа
OCaml в некоторой степени похож на язык сценариев в том смысле, что любые выражения верхнего уровня оцениваются при запуске программы. Принято иметь функцию с именем main
, которая вызывает основную работу вашей программы. Но это совсем не обязательно.
Выражения оцениваются в том порядке, в котором файлы OCaml появлялись, когда они были связаны с исполняемым файлом. Очень часто это означает, что вызов main
- последнее, что происходит при запуске программы. Другие файлы часто появляются перед файлом, содержащим main
, и любой код верхнего уровня этих файлов будет выполнен первым.
Нет, функция main в OCaml не нужна, и она выполняет синтаксический анализ кода от начала до конца.
Когда у вас есть несколько файлов, вам нужно будет скомпилировать их по порядку (или с помощью прямых ссылок)
Похожие вопросы
Связанные вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение