何时计算文件顶层的 OCaml 表达式?



似乎OCaml在编译时运行一些表达式;例如,如果我写

let (_ : int) = 1 / 0

在文件的顶层,编译器将失败,并显示"未捕获的异常:Division_by_zero"错误。

这是否意味着这些值是在二进制文件中编译时计算的?例如,如果我使用Core,并且我写

open! Core
let date = Date.today ~zone:(force Time.Zone.local)

这是指编译时的日期,还是其他什么,比如程序执行的日期?

我无法重现您描述的行为。这是我看到的:

$ cat dz.ml
let (_ : int) = 1 / 0
$ ocamlc -c dz.ml
$ ocamlopt -c dz.ml

两个OCaml编译器是ocamlc和ocamlopt,它们在我的系统上都没有显示这种行为。

如果您给出特定的命令序列来重现您观察到的内容,这将有所帮助。

最新更新