Eli*_*Eli 6 ocaml functional-programming variable-assignment
从Lisp来到OCaml,我发现自己在函数何时返回以及何时不返回时非常困惑.我想念我的魔术报价!值得庆幸的是,大多数时候,OCaml似乎能够自动地知道我什么时候需要评估功能,何时不需要.但是,我经常发现自己试图在let表达式中分配函数的返回值,如下所示.
let start = Sys.time in
(*
* do something here
*)
;
let ending = Sys.time in
Printf.printf "did something in %f seconds\n" (ending -. start)
Run Code Online (Sandbox Code Playgroud)
但后来ocamlc抱怨
Error: This Expression has type unit -> float
but an expression was expected of type float
Run Code Online (Sandbox Code Playgroud)
告诉我开始和结束都是必然的Sys.time,而不是返回值Sys.time.
这种行为我试图不是OCamly吗?我想以另一种方式做事吗?我只是缺少一些完全明显的东西吗?
sep*_*p2k 10
将函数应用于参数时,将评估函数.即,当你这样做时f,f永远不会得到评估.当你这样做时f x,f总是得到评估.这没有什么神奇之处.
正如您正确指出的那样,Sys.time是一个函数(类型unit -> float)并且let start = Sys.time只是将该函数赋值给start.
要获得您想要的行为let start = Sys.time (),将函数应用于Sys.time参数()(这是类型的唯一值unit).