使用C#体验函数式编程之——Currying(柯里化)
前言
上次,我們嘗試了函數(shù)式編程中的Partial application(局部應(yīng)用)。
Partial Application是函數(shù)式編程中一個(gè)很常見的模式,它通過(guò)固定一個(gè)函數(shù)的部分參數(shù),產(chǎn)生一個(gè)參數(shù)較少的函數(shù)。
今天,我們?cè)賮?lái)體驗(yàn)函數(shù)式編程另外一種模式,Currying(柯里化)。
Currying
Currying是將具有多個(gè)參數(shù)的函數(shù)拆分為一個(gè)參數(shù)函數(shù)的嵌套鏈的過(guò)程。因此,柯里化函數(shù)是一個(gè)函數(shù),它一次接受一個(gè)參數(shù),在每一步都返回一個(gè)新函數(shù)。
例如有一個(gè)函數(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)用同一個(gè)函數(shù),并且傳遞的參數(shù)絕大多數(shù)都是相同的,那么使用Currying處理過(guò)的函數(shù),則是一個(gè)很好的選擇。
那么,用C#怎么實(shí)現(xiàn)呢?
Demo
和上次一樣,我們引用nuget包Curryfy。
通過(guò)將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)相似,但是使用場(chǎng)景不同:
Partial application 主要用于減少參數(shù)輸入,實(shí)現(xiàn)默認(rèn)參數(shù)
Currying 主要用于函數(shù)組合,每次只接受一個(gè)參數(shù),實(shí)現(xiàn)f(g(x))的效果
總結(jié)
以上是生活随笔為你收集整理的使用C#体验函数式编程之——Currying(柯里化)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021技术文大盘点 | 打包过去,
- 下一篇: 如何通过 C# 将文本变为声音 ?