Swift_currying(柯里化)

作者: Mccc_ | 来源:发表于2017-10-12 20:24 被阅读815次

一. Currying解释

  1. currying 翻译为局部套用.又称为部分求值(Partial Evaluation), 是一种函数式编程思想,在Swfit4.0的 时候已经废弃了函数的柯里化. 函数的 currying 特性的使用场景并不大,但他会增加很多语言的复杂性,所以需要删除它,但是柯里化函数式编程思想还是很重要的.
  1. 特点:
    只用“表达式”(表达式:单纯的运算过程,总是有返回值),不用“语句”(语句:执行某种操作,没有返回值)。2.不修改值,只返回新值。
  1. 好处:
    代码简洁
    提高代码复用性
    代码管理方便,相互之间不依赖,每个函数都 是一个独立的模块,很容易进行单元测试。
    易于“并发编程”,因为不修改变量的值,都是返回新值。
    最大的好处就是能把函数当参数用!!

二. 代码示例

需求: 需要三个函数.

  • 第一个函数,在自身上+1.
  • 第一个函数,在自身上+2.
  • 第一个函数,在自身上+3.
    func addTo(_ adder : Int) -> (Int) -> Int {
        return {
            num in
            return num + adder
        }
    }

   // 使用
   let addOne = addTo(1000)
   let result_one = addOne(1)
   print(result_one)       
    /**
         addTo(1000) 返回一个闭包 (Int) -> Int
         num in 的意思是: 用in把参数和方法隔开. num就是闭包的入参(Int)
         该闭包里面执行的是 return num + adder.
   */
// 这是一个字符串的示例
    func strAppends(_ a : String) -> (String) -> String {
        return {
            b in
            return a + b
        }
    }
将一个普通的三个入参的函数转化为柯里化函数
    func add(a: Int, b: Int, c: Int) -> Int{
        print("\(a) + \(b) + \(c)")
        return a + b + c
    }
    func add(_ a: Int) -> (Int) -> (Int) -> Int{
        return {
            b in
            return {
                c in
                a + b + c
            }
        }
    }

   // 使用
   let one = add(1)
   let result = one(2)(3)
   print(result)
没有返回值的
    func printString(_ month : Int) -> (Int) -> (String) -> Void {

        return {
            day in
            return {
                action in
                print("\(month)月" + "\(day)日" + "\(action)")
            }
        }
    }

// 使用
printString(8)(25)("我想找个对象")
// 输出:  8月25日我想找个对象

相关文章

  • Swift_currying(柯里化)

    一. Currying解释 currying 翻译为局部套用.又称为部分求值(Partial Evaluation...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 函数式编程(三)—— 柯里化

    柯里化Lodash中的柯里化 —— curry()案例柯里化原理模拟柯里化总结 【函数式编程总体设计】 之前讲了函...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • js柯里化

    标签: js柯里化 js柯里化 柯里化是什么在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成...

  • 柯里化和反柯里化

    一、柯里化 定义函数柯里化就是把一个函数中的一些可以固定的参数固定后生成新的函数比如一个函数: 现在有一个需求:就...

  • swift 柯里化

    swift 柯里化 柯里化 1、什么是柯里化? 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一...

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

网友评论

    本文标题:Swift_currying(柯里化)

    本文链接:https://www.haomeiwen.com/subject/qkioyxtx.html