Currying-柯里化[Swift笔记]

本文介绍了柯里化的概念及其在编程中的应用,通过简单的例子展示了如何将接受多个参数的方法转换为接收一个参数的方法,并返回接受剩余参数并返回结果的新函数。详细解释了柯里化的原理和实现方式,并提供了利用闭包实现柯里化的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Currying (柯里化)是什么?

把接受多个参数的方法变成接收一个参数的方法,并且返回接受余下的参数而且返回结果的新函数的技术

Currying的概念最早由俄国数学家Moses Schönfinkel引入,之后由数理逻辑学家哈斯格尔·科里(Haskell Curry)将其丰富和发展


简单例子 - 用法

func MulOperation(a: Int)(b: Int) -> Int {
        return a * b
    }

调用(1)

        let firOpr = self.MulOperation(3)
        let result = firOpr(b: 10)
输出结果是:30


调用(2)

        let result = self.MulOperation(2)(b: 3)
输出结果是:6

这种形式有点像OC里得调用方式,alloc -> init,先把参数1穿进去得到一个闭包函数,紧接着再拿它去做后继操作


调用(3)

        let firOpr = self.MulOperation(2)
        let lasOpr = 1...100
        let results = lasOpr.map(firOpr)


输出结果 2 - 200


仿着实现一个

利用闭包(Closure),我们也来实现Currying


    func MulClosure(a: Int) -> (b: Int) -> Int{
        
        return {(b: Int) -> Int in
            return a * b
        }
    }


把最上边调用换一换 实际得到结果一样


    func tAddFunction(a: Int) -> (b: Int) -> (c: Int) -> (d: Int) -> Int{
    
        return {(b: Int) -> (c: Int) -> (d: Int) -> Int in
            
            return {(c: Int) -> (d: Int) -> Int in
                
                return {(d: Int) -> Int in
                        return a + b + c + d
                    }
                }
        }
    }



个人感觉上,有点像把方法组件化使用了,这样得好处就是复用更灵活



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值