OCaml的主要功能

追求

来自经过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扩展以不定义主要方法。

object Hello extends App {
    class A

    println(new A() getClass())
    print("Hello, world")
}

即使在这种情况下,我们也需要Hello.main(args)在解释器模式下执行它,即scala hello.scalaOCaml似乎不需要对ocaml(已解释),ocamlc和ocamlopt(已编译)进行任何更改。

那么,我们是否需要OCaml中的主要功能?如果是这样,OCaml是否只是从代码的开头到结尾生成代码?如果是这样,OCaml如何找到具有多个源代码的主代码?

杰弗里·斯科菲尔德

OCaml有点像脚本语言,因为在启动程序时会评估所有顶级表达式。通常有一个名为的函数main来调用程序的主要工作。但这完全没有必要。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章