日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

使用C#体验函数式编程之——Currying(柯里化)

發(fā)布時間:2023/12/4 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用C#体验函数式编程之——Currying(柯里化) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

上次,我們嘗試了函數(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。