在OCaml中編寫以下代碼的慣用方式具有更好的可讀性?OCaml中沒有where子句的長函數
let big_function arg =
let big_helper_fn acc = function
| p -> ...
...
...
... foo(arg)
...
...
| _ -> ...
in
let small_helper_1 a b =
...
...
in
let small_helper_2 a b =
...
...
in
fold big_function default_acc
%> small_helper_1 aa1
%> small_helper_2 aa2
吊裝內功能以外可以有兩個原因是不期望的:
- 人們可能需要通過幾個參數明確地,而不是直接訪問(用上面
foo(arg)
示出)。如果有更多的參數,這會變得很麻煩,比如需要3個參數,big_helper_fn
使用所有參數,並且累加器也是3元素的元組。 - 輔助函數在比所需範圍更大的範圍內變得不必要地可見。當人們僅僅撇開模塊時,他們可能會分心,因爲與重要的相同的壓痕深度。
如果OCaml有第一類where
子句,這不會是一個問題。我確實找到了一個PPX和另一個Github repo。
請按照您的答案建議的方法,提供一本書/風格指南/大型項目的官方文檔/名稱的參考。
編輯:我用這個代碼示例遇到的麻煩是可讀性受損,因爲的實際定義與頂部的原始let big_function ...
語句分開很多。所以我正在尋找一種更可讀的慣用選擇。
什麼的(%>)運算符嗎? – user3240588
@ user3240588,它構成功能從左至右(而不是通常的從右到左)。 – theindigamer
我真的不明白這個問題。你的代碼已經在OCaml中有效並且相當習慣。 「where」子句只會顛倒聲明的順序(這在OCaml中是非常不慣用的)。 – Drup