【发布时间】:2015-04-27 00:09:39
【问题描述】:
来自受过 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 中的 main 函数吗?如果是这样,OCaml 是否只是从代码的开头到结尾生成代码?如果是这样,OCaml如何找到具有多个源代码的主代码?
【问题讨论】:
-
请注意,在许多语言中,您可以在主函数之前在全局范围内定义变量,这需要在主函数开始之前执行代码。如果您允许对全局定义产生副作用,为什么不能有任何声明?
-
@didierc:你能详细说明一下吗?
-
@didierc:我明白了。谢谢。