使用C#体验函数式编程之——Currying(柯里化)
前言
上次,我們嘗試了函數(shù)式編程中的Partial application(局部應(yīng)用)。
Partial Application是函數(shù)式編程中一個很常見的模式,它通過固定一個函數(shù)的部分參數(shù),產(chǎn)生一個參數(shù)較少的函數(shù)。
今天,我們再來體驗(yàn)函數(shù)式編程另外一種模式,Currying(柯里化)。
Currying
Currying是將具有多個參數(shù)的函數(shù)拆分為一個參數(shù)函數(shù)的嵌套鏈的過程。因此,柯里化函數(shù)是一個函數(shù),它一次接受一個參數(shù),在每一步都返回一個新函數(shù)。
例如有一個函數(shù)f(a, b, c), 我們可以傳入?yún)?shù)a生成函數(shù)f_a,再傳入?yún)?shù)b生成函數(shù)f_ab,最后傳入?yún)?shù)c執(zhí)行函數(shù)。
調(diào)用同一個函數(shù),并且傳遞的參數(shù)絕大多數(shù)都是相同的,那么使用Currying處理過的函數(shù),則是一個很好的選擇。
那么,用C#怎么實(shí)現(xiàn)呢?
Demo
和上次一樣,我們引用nuget包Curryfy。
通過將Curry擴(kuò)展方法用于Func委托實(shí)現(xiàn)Currying。示例代碼如下:
using?static?Curryfy.CurryExtensions;Func<int,?int,?int,?int>?add?=?(a,?b,?c)?=>?a?+?b?+?c;var?addCurried?=?add.Curry();var?add1?=?addCurried(1); var?add4?=?add1(3); var?result?=?add4(5);Console.WriteLine(result); //9結(jié)論
Partial application和Currying的功能感覺有點(diǎn)相似,但是使用場景不同:
Partial application 主要用于減少參數(shù)輸入,實(shí)現(xiàn)默認(rèn)參數(shù)
Currying 主要用于函數(shù)組合,每次只接受一個參數(shù),實(shí)現(xiàn)f(g(x))的效果
總結(jié)
以上是生活随笔為你收集整理的使用C#体验函数式编程之——Currying(柯里化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021技术文大盘点 | 打包过去,
- 下一篇: c# char unsigned_dll