OCaml lazy
Functional Programming OCaml
OCaml 的求值策略採用 call by value,也就是參數表達式在傳遞前會優先求出結果再傳遞,但是 OCaml 的 lazy
可以無視這個規則。
今天將一個表達式前面加上 lazy
,OCaml 是不會自動幫你執行的
let f s =
print_endline s;
s
;;
let lazy_value = lazy (f "lazy")
當你需要執行取結果時可以主動使用 Lazy.force lazy_value
。
另一個特性是 lazy 被執行一次後會幫你記憶結果,所以再次使用 Lazy.force lazy_value
不會再執行運算,而是直接返回第一次的結果,因為這樣,擺在 lazy
後的表達式不應該有副作用,否則會有非預期結果。
另外在官方文件中有提到 Lazy.force
本身並不是執行緒安全的,必須要有相應的措施。