Đến với OCaml từ Lisp, tôi thấy mình rất bối rối khi các hàm trả về và khi chúng không. Tôi nhớ phép thuật của tôi Trích dẫn! Rất may, hầu hết thời gian, OCaml dường như tự động biết khi tôi muốn một chức năng được đánh giá và khi tôi không. Tuy nhiên, tôi thường thấy mình cố gán giá trị trả về của một hàm trong một biểu thức let, như sau.Đảm bảo chuyển nhượng cho giá trị trả về của hàm trong OCaml
let start = Sys.time in
(*
* do something here
*)
;
let ending = Sys.time in
Printf.printf "did something in %f seconds\n" (ending -. start)
nhưng sau đó ocamlc phàn nàn
Error: This Expression has type unit -> float
but an expression was expected of type float
Nói cho tôi mà bắt đầu và kết thúc chắc chắn sẽ Sys.time
, không phải là giá trị trả về của Sys.time
.
Hành vi này tôi đang cố gắng để không nhận được OCamly? Tôi có muốn làm mọi thứ theo cách khác không? Tôi chỉ thiếu một cái gì đó hoàn toàn rõ ràng?