我正在閱讀 Enrico Buonanno 寫的名為 C# 中的函式式編程的書
public static Validator<T> FailFast<T>
(IEnumerable<Validator<T>> validators)
=> t
=> validators.Aggregate(Valid(t), (acc, validator) => acc.Bind(_ => validator(t)));
上面代碼的原文是:
fail-fast 策略更容易實作:每個驗證器都回傳一個 Validation,而 Validation 公開一個 Bind 函式,該函式僅在狀態為 Valid 時才應用系結函式(就像 Option 和 Either 一樣),因此我們可以使用 Aggregate 遍歷串列驗證器并將每個驗證器系結到運行結果。
FailFast 函式接受一個驗證器串列并回傳一個驗證器:一個期望 T 型別的物件進行驗證的函式。在接收到有效 t 時,它使用 Valid(t) 作為累加器遍歷驗證器串列(如果驗證器串列為空,則 t 有效)并將串列中的每個驗證器應用到具有 Bind 的累加器。
有三個 => 標志。這讓我很難很好地理解代碼。有誰熟悉 => 運算子并且可以用簡單的英語解釋嗎?非常感謝。
我還在檔案中檢查了 => 運算子。 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator但檔案中的演示并不像上面的代碼那么復雜。
uj5u.com熱心網友回復:
這里的=>意思不同,但通常每個都表示一個 lambda,匿名函式(帶有 opt.closure),它在某處傳遞 - 通常作為函式呼叫中的引數。
所以,從大塊明顯的代碼開始,比如類和頂級方法,找到()指示函式呼叫的強制性代碼,它可能會更容易掌握。
First => 是方法體 (FailFast) 的簡寫形式,用于跳過撰寫{ }小方法以實作“可讀性”(此處:值得懷疑)。
第二個 => 是一個 lambda,創建為 FailFast 的回傳值。
第三個 => 是一個 lambda,作為引數傳遞給 Aggregate()。
第四個 => 是一個 lambda,作為引數傳遞給 Bind()。
添加一些括號并添加頂級函式括號以使其更可見:
public static Validator<T> FailFast<T>(IEnumerable<Validator<T>> validators)
{
return t => validators.Aggregate(Valid(t), ..secondparam..);
}
第二個引數是:
(acc, validator) => acc.Bind(...anotherparam...)
另一個引數是:
_ => validator(t)
t從 lambda 的范圍中出來return t=>。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470305.html
上一篇:工廠函式JS
