前言

上次,我们尝试了函数式编程中的Partial application(局部应用)。

Partial Application是函数式编程中一个很常见的模式,它通过固定一个函数的部分参数,产生一个参数较少的函数。

今天,我们再来体验函数式编程另外一种模式,Currying(柯里化)。

Currying

Currying是将具有多个参数的函数拆分为一个参数函数的嵌套链的过程。因此,柯里化函数是一个函数,它一次接受一个参数,在每一步都返回一个新函数。

例如有一个函数f(a, b, c), 我们可以传入参数a生成函数f_a,再传入参数b生成函数f_ab,最后传入参数c执行函数。

调用同一个函数,并且传递的参数绝大多数都是相同的,那么使用Currying处理过的函数,则是一个很好的选择。

那么,用C#怎么实现呢?

Demo

和上次一样,我们引用nuget包Curryfy

通过将Curry扩展方法用于Func委托实现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

结论

Partial application和Currying的功能感觉有点相似,但是使用场景不同:

  • Partial application 主要用于减少参数输入,实现默认参数

  • Currying 主要用于函数组合,每次只接受一个参数,实现f(g(x))的效果

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

  1. JS函数式编程思维:柯里化、闭包

    偏函数(Partial Application): 探讨柯里化之前,我们先聊一聊很容易跟其混淆的另一个概念--偏函数(Partial Application).在维基百科中,对 Partial App ...

  2. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  3. 函数式编程 -- 纯函数、柯里化函数

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 学习函数式编程,要知道什么是纯函数,使用纯函数的好处,了解有关副作用的相关信息,以及纯函数相关的功能库Lodash,还有什么是函数的柯里化. 一.纯 ...

  4. java 柯里化_函数式编程(Java描述)——Java中的函数及其柯里化

    本文继续上一篇的内容 在Java中,函数可以表现为一个普通的方法.一个lambda表达式,又或者方法引用,甚至是匿名类.本文不会介绍匿名类这种形式. 方法 Java中的方法,Java使用方法这一概念来 ...

  5. 函数式编程之一柯里化

    什么是柯里化? 柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数的函数 下面来看一个案例,两值相加: 柯里化之前(常见用法) function add(x, y) {return ...

  6. 如何理解柯里化|函数式编程

    这里我们来谈论下函数式编程中另一个重要的概念,柯里化 首先,我们先通过下面的方式将上节代码中不纯的函数变成纯函数.就是将mini拿到函数内部去. function checkAge (age) {le ...

  7. JavaScript 中的函数式编程:函数,组合和柯里化

    作者:Fernando Doglio 译者:前端小智 来源:medium 移动端阅读:点这里 点赞再看,微信搜索 [大迁世界] 关注这个没有大厂背景,但有着一股向上积极心态人.本文 GitHub ht ...

  8. JavaScript函数式编程(纯函数、柯里化以及组合函数)

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 目录 JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 1.纯函数 1.1.纯函数的概念 1.2.副作用 1.3.纯函数 ...

  9. 什么是函数式编程,函数合并与柯里化又是什么意思?

    函数式编程在耳边回响了多年,今天就来详细了解一下它吧. 函数式编程的主要特征是:函数是一等公民.它建议大家写纯函数.没有副作用的函数. 讨论完纯函数的内容,我们会看一下最重要的应用:函数的柯里化. 纯 ...

最新文章

  1. 检测DTMF信号中的时间间隔
  2. MapReduce-Shuffle机制运行解析
  3. Maltego更新到4.2.6
  4. linux显示父目录,linux – 仅列出文件的公共父目录
  5. 【BZOJ4004】装备购买(线性基)
  6. mysql2005错误_sql-server-2005 – SQL Server 2005错误701 – 内存不足
  7. log4j配置目标到mongodb
  8. js 对 URL 参数进行 加密 解密
  9. php 20分钟以前,php返回相对时间(如:20分钟前,3天前)的方法_PHP
  10. CentOS7 服务器连接超时自动断开问题解决
  11. 高中计算机考试实施方案,山东省高中信息技术学业水平考试实施方案及思考
  12. pam php水解加碱,2钻井液化学.ppt
  13. 计算机程序终止代码,win10电脑终止代码driver irql not less or equal蓝屏最简单解决方法...
  14. mysql怎么实现表的复制粘贴_如何对MySQL数据表进行复制、表结构复制
  15. threejs的转场动画 (基于Tween实现)、平滑切换场景
  16. RocketMQ:两种消费方式:pull拉、push推
  17. 项目之: JMSamp、ActiveMQ
  18. 神经痛分类图片大全,神经病理性疼痛分类
  19. ZYNQ PS端模块读书笔记-中断
  20. 你有花生我有酒,一本学道看一天(一)

热门文章

  1. spring之二——使用maven创建一个java project
  2. 跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)
  3. 虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...
  4. ASP.NET MVC数据验证(上)
  5. matlab拟合四次函数表达式,用matlab编写程序求以幂函数作基函数的3次、4次多项式的最小二乘曲线拟合,画出数据散点图及拟合曲线图...
  6. ArcEngine开发体验(附许可)
  7. java根据模板生成PDF
  8. 算法61---两个字符串的最小ASCII删除和【动态规划】
  9. ubantu 重启mysql
  10. 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能