美文网首页Swift
swift - 柯里化(Currying)

swift - 柯里化(Currying)

作者: KeymyLin | 来源:发表于2017-02-10 14:26 被阅读0次

    柯里化可以认为是在编码过程中发现众多相似的函数定义后,将它们抽象成一个高阶函数,一般来说这个高阶函数接受多个参数,通过控制传入参数可以使高阶函数变形为满足功能需求的低阶函数。swift的柯里化也是其函数式的特点的重要表现之一。

    举个例子:
    开始我们要编写一个函数输入一个参数返回加1后的结果。

    func addOne (num:Int) -> Int {
        return num + 1;
    }
    

    然后需求增加,我们需要编写一个函数输入一个参数返回其加2后的结果

    func addTwo (num:Int) -> Int {
        return num + 2;
    }
    

    这里就只是1和2的不同,但是我们需要定义两个函数,如果相似需求的增加我们也要相应定义更多的函数。难道我们没有更通用的方法吗?其实使用Currying就能很好的解决上面的问题。我们可以定义一个通用的函数它接受一个与输入数字相加的数,并返回一个函数。返回的函数将接受输入数字本身,然后进行操作。可以我们是先定义一个高阶的函数,然后使用高阶的函数生产出我们需要的函数:

    func addTo(_ adder: Int) -> (Int) -> Int {
        return { num in
            return num + adder
        }
    }
    
    let addOne = addTo(1)  //addOne: Int -> Int
    let addTwo = addTo(2)  //addTwo: Int -> Int
     
    let oneResult = addOne(3)   // oneResult == 4
    let twoResult = addTwo(4)   // twoResult == 6
    

    可以看出Currying是一种量产相似函数的好方法,它可以避免写出很多重复的代码,也方便了日后的维护。

    相关文章

      网友评论

        本文标题:swift - 柯里化(Currying)

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