假设我有一堆嵌套的let...in语句。我注意到如果我有
(* a bunch of let... in above *)
let test = expr1 in
(* a bunch of let ... in below *)
我得到了这个Error (warning 26): unused variable test
,但是当我将它更改为let _ = expr1 in ...
或let () = expr1 in ...
时,就没有错误消息了。
我知道let _ =
是任何类型单元的模式匹配,而let () =
是任何类型单元的模式匹配,但这是否意味着我的expr1
只是在任何地方被执行?叫过一次吗?
发布于 2022-01-01 09:12:37
有一个非常简单的实验,你可以做这样的测试:
let test = print_endline "named";;
let _ = print_endline "any pattern";;
let () = print_endline "unit";;
正如您所看到的,无论您将其放入源文件并编译它,还是在toplevel中运行它,它都会精确地打印每个字符串一次。
OCaml是一种严格评估(更具体地说,是按值调用)具有副作用的语言,这意味着它将按顺序计算表达式,而不是优化具有潜在副作用的代码。
https://stackoverflow.com/questions/70547726
复制相似问题