Swift支持函数嵌套,这让在函数中返回其他函数变成了一种可能。不过其中也存在着一些陷阱。
Example 1:
import Foundation
func OuterFunc(a:Int)->(Int)->Int
{
var start=
func InnerFunc(b:Int)->Int
{
start+=a*b
return start
}
return InnerFunc
}
var funtest=OuterFunc()
print(funtest()) // 10, start = 10 after execute this time
print(funtest()) // 20
Example 2:
a.
import Foundation
func OuterFunc(a:Int)->Int
{
var start=
func InnerFunc(b:Int)->Int
{
start+=a*b
return start
}
return InnerFunc()*InnerFunc(a)
}
print(OuterFunc())// return 140 10*(10+4)
b.
import Foundation
func OuterFunc(a:Int)->Int
{
var start=
func InnerFunc(b:Int)->Int
{
start+=a*b
return start
}
return InnerFunc(a)*InnerFunc()
}
print(OuterFunc()) //return 56 4*(4+10)
在以上两个例子中start变量的值会因为之前有过调用而变为非初始值,所以造成了
Example 1:
相同参数返回不同结果。
Example 2:
更改函数调用顺序返回不同结果。
总结:
1.变量要在函数内部(每次调用函数)初始化。
2.如果相同变量返回值不同,排查函数内部使用变量