golang柯里化实现

直接上代码

// 定义可柯里化函数形式
type function func(...interface{}) interface{}// 通用柯里化函数
func (f function) curry(i interface{}) func(...interface{}) interface{} {return func(values ...interface{}) interface{} {values = append([]interface{}{i}, values...)fmt.Println(values)return f(values...)}
}

首先定义一个类型,代表可柯里化函数,然后实现可柯里化函数的通用柯里化函数。

使用案例

单元测试内容如下

// 等待实现柯里化的普通函数
func add(a, b int) int {return a + b
}func TestCurry(t *testing.T) {// 把普通的函数转化成可柯里化函数var addCurry function = func(values ...interface{}) interface{} {return add(values[0].(int), values[1].(int))}// 调用柯里化过程生成新函数add5 := addCurry.curry(5)// 调用新函数产生最终结果v := add5(8)if v != 13 {t.Error("期望13,实际", v)}
}

说明

由于go语言强类型限制,我们没有办法把add函数直接传递给curry函数,必须通过特殊方式把一个普通函数转换成柯里化函数。转换过程不用思考,按下面方式处理。

 // 这行是通用的,不用动var addCurry function = func(values ...interface{}) interface{} {// 在这里调用要转换的函数,把参数一个个转换成所需类型即可return add(values[0].(int), values[1].(int))}

继续讨论

由于go语言强类型限制,通用curry函数没能做到javascript那么方便,在使用时,多了一步普通函数转可柯里化函数的模板化代码,程序显得有些臃肿,降低了程序可读性,谁有更好的方案,欢迎拍砖。

golang函数式编程之柯里化相关推荐

  1. 深入理解函数式编程之柯里化

    目录 柯里化定义 柯里化原因 柯里化前奏--需要固定数量参数 实现柯里化--期待固定数量参数 应用柯里化 流程剖析 柯里化定义 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转化成一系列使 ...

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

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

  3. java8函数式编程笔记-科里化

    java函数式编程-科里化 什么是函数? 在数学上,函数的定义为"它接受零个或多个参数,生成一个或多个结果" 而在java8中,函数的定义为像数学函数一样没有副作用的函数 复制代码 ...

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

    前言 上次,我们尝试了函数式编程中的Partial application(局部应用). Partial Application是函数式编程中一个很常见的模式,它通过固定一个函数的部分参数,产生一个参 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 深度丨人工智能和大数据的关系及中国在AI领域如何赶超世界
  2. WPF 异常其他信息: “对类型“BaseControl.KImgButton”的构造函数执行符合指定的绑定约束的调用时引发了异常。”,行号为“38”,行位置为“22”。...
  3. Node.js 目录操作
  4. python精要(73)-turtle(3)
  5. abb外部轴零位校准_RobotStudio软件:机器人自定义行走轴配置与仿真
  6. Redis的内存淘汰策略问题
  7. 实战Jquery(一)--username校验
  8. wpfdiagram 学习 教学_开启双自主学习模式 助力学生生命成长——长清湖实验学校开展“双自主合作学习”教学模式...
  9. HDU4267(2012年长春站)
  10. ScrollView垂直滚动控件
  11. centos7 安装mysql_第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据
  12. 华为的手册和官网视频,学习网络基础
  13. 《跟我学Shiro》——张开涛(链接)
  14. 详尽的msf——meterpreter——渗透测试教程
  15. 苹果账号续费以及过期更新问题
  16. android集成环信客服云_2019.6.12
  17. 单片机c语言led灯闪烁程序,单片机LED灯闪烁程序
  18. 教你快速开发一个 狼人杀微信小程序(附源码)
  19. CRF++安装教程(含Windows和Linux两个版本)
  20. Android鹰眼轨迹追踪

热门文章

  1. JavaScript中es5继承(call、apply)和es6继承(super)
  2. CDIO完整实现必备的几个过程(不成熟的想法,供讨论)
  3. 苏州六西格玛绿带企业成功实施六西格玛项目原因
  4. WIN 10 未关闭浏览器的情况下关机,再次开机Windows会自动打开浏览器并打开上次的网页修复方法
  5. “灾难无情人有情”:备战金三银四之微服务架构问题!(含解析)
  6. 亚马逊跟卖僵尸采集软件一分钟采集上千个僵尸链接操作方式
  7. Java 培训班出来之后的面试经历,很难!!
  8. UMTS无线接入技术
  9. 探讨:网银数字证书加密解密原理
  10. 多线程——python