Swift 函数嵌套

Swift支持函数嵌套,这让在函数中返回其他函数变成了一种可能。不过其中也存在着一些陷阱。
Example 1:

import Foundation
func OuterFunc(a:Int)->(Int)->Int
{
    var start=0
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc
}

var funtest=OuterFunc(2)

print(funtest(5))    // 10, start = 10 after execute this time
print(funtest(5))    // 20

Example 2:
a.

import Foundation

func OuterFunc(a:Int)->Int
{
    var start=0
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc(5)*InnerFunc(a)
}

print(OuterFunc(2))// return 140 10*(10+4)

b.

import Foundation

func OuterFunc(a:Int)->Int
{
    var start=0
    func InnerFunc(b:Int)->Int
    {
        start+=a*b
        return start
    }
    return InnerFunc(a)*InnerFunc(5)
}

print(OuterFunc(2)) //return 56 4*(4+10)

在以上两个例子中start变量的值会因为之前有过调用而变为非初始值,所以造成了
Example 1:
相同参数返回不同结果。
Example 2:
更改函数调用顺序返回不同结果。

总结:
1.变量要在函数内部(每次调用函数)初始化。
2.如果相同变量返回值不同,排查函数内部使用变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值