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.如果相同變量傳回值不同,排查函數内部使用變量