我看到了一些像這樣的 OCaml 代碼(簡化示例):
match x_opt with
| Some x ->
(match do_some_stuff_with_x... with
| Some y -> do_some_stuff_with_y...
| None -> None
)
| None -> None
以下替代方案是否存在高性能成本?(特別是閉包的記憶體使用情況)?
(* using core_kernel's Option module *)
x_opt
|> Option.bind ~f:(fun x -> do_some_stuff_with_x....)
|> Option.bind ~f:(fun y -> do_some_stuff_with_y....)
可能的答案:
- 該
Option.bind版本可能會任意昂貴,具體取決于您關閉的內容 - flambda 通常足夠聰明,可以優化關閉(就像 rustc 一樣)
- 其他
uj5u.com熱心網友回復:
系結版本可能會產生一些創建閉包的開銷,實際上通常會被 flambda 優化掉。即使沒有創建閉包,例如,當系結函式沒有從外部背景關系中捕獲任何內容時,例如 in Option.bind ~f:Option.return,額外呼叫的開銷也很小。
所有這些開銷都可以被認為是微不足道的,除非它們在非常熱的回圈中運行。因此,除非您分析并發現這是一個問題,否則請嘗試使用您認為在給定情況下最易讀的樣式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/514362.html
上一篇:通過R中的附加標準(人員和位置)有效地匯總許多不同時間段的資料
下一篇:如何加快包含HAVING的查詢?
