pro*_*eek 5 ocaml program-entry-point scala
来自在C世界中受过训练的程序员,这是我对OCaml的主要方法.
let main () =
Printf.printf "Hello, world - %d %s\n" (Array.length Sys.argv) Sys.argv.(0)
;;
main ()
Run Code Online (Sandbox Code Playgroud)
但是,这段代码适用于ocaml/ocamlc/ocmalopt.
Printf.printf "Hello, world - %d %s\n" (Array.length Sys.argv) Sys.argv.(0)
;;
Run Code Online (Sandbox Code Playgroud)
这背后的逻辑是什么?OCaml是否类似于脚本语言(即使它用ocamlc或ocamlopt编译成二进制),因为它不需要main函数?
与Scala相比,我们可以从App扩展,以便不定义main方法.
object Hello extends App {
class A
println(new A() getClass())
print("Hello, world")
}
Run Code Online (Sandbox Code Playgroud)
即使在这种情况下,我们也需要 Hello.main(args)在解释器模式下执行它:即,scala hello.scala.OCaml似乎不需要对ocaml(解释),ocamlc和ocamlopt(编译)进行任何更改.
那么,我们是否需要OCaml中的主要功能?如果是这样,OCaml是否只是从代码的开头到结束生成代码?如果是这样,OCaml如何找到具有多个源代码的主代码?
OCaml模糊地类似于脚本语言,因为在启动程序时会评估任何顶级表达式.通常有一个名为的函数main调用程序的主要工作.但它根本没有必要.
表达式按OCaml文件链接到可执行文件时出现的顺序进行评估.通常这意味着调用main是启动程序时发生的最后一件事.其他文件通常出现在包含的文件之前main,并且将首先执行这些文件的任何顶级代码.
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |