OCaml中的主要函数
The main function in 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 编译成二进制文件)因为它不需要 main 函数?
与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 中的 main 函数吗?如果是这样,OCaml 是否只是从代码的开头到结尾生成代码?如果是这样,OCaml 如何找到具有多个源代码的主代码?
不,OCaml 中不需要 main 函数,它会从头到尾解析代码。
当你有多个文件时,你需要按顺序编译它们(或使用前向引用)
OCaml 有点像脚本语言,因为任何顶级表达式都会在您启动程序时进行计算。通常有一个名为 main
的函数来调用程序的主要工作。但完全没有必要。
表达式按照 OCaml 文件链接到可执行文件时出现的顺序求值。通常这意味着调用 main
是启动程序时发生的最后一件事。其他文件通常出现在包含 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 编译成二进制文件)因为它不需要 main 函数?
与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 中的 main 函数吗?如果是这样,OCaml 是否只是从代码的开头到结尾生成代码?如果是这样,OCaml 如何找到具有多个源代码的主代码?
不,OCaml 中不需要 main 函数,它会从头到尾解析代码。
当你有多个文件时,你需要按顺序编译它们(或使用前向引用)
OCaml 有点像脚本语言,因为任何顶级表达式都会在您启动程序时进行计算。通常有一个名为 main
的函数来调用程序的主要工作。但完全没有必要。
表达式按照 OCaml 文件链接到可执行文件时出现的顺序求值。通常这意味着调用 main
是启动程序时发生的最后一件事。其他文件通常出现在包含 main
的文件之前,这些文件的任何顶级代码将首先执行。