OCaml的主要功能

时间:2015-02-25 05:07:40

标签: scala ocaml main

来自在C世界中受过训练的程序员,这是我对OCaml的主要方法。

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相比,我们可以从App扩展,以便不定义main方法。

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 个答案:

答案 0 :(得分:9)

OCaml模糊地类似于脚本语言,因为在启动程序时会评估任何顶级表达式。拥有一个名为main的函数来调用程序的主要工作是常规的。但它根本没有必要。

表达式按OCaml文件链接到可执行文件时出现的顺序进行评估。通常这意味着调用main是启动程序时发生的最后一件事。其他文件通常出现在包含main的文件之前,并且将首先执行这些文件的任何顶级代码。

答案 1 :(得分:3)

不,OCaml中不需要主函数,它会从头到尾解析代码。

如果您有多个文件,则需要按顺序编译它们(或使用前向引用)