您的功能簡潔如下:
func incrementor (var value : Int = 0) ->() -> Int {
return { return value++ }
}
函數incrementor
接受一個參數value
並返回() -> Int
,它本身就是一個函數。沒有必要命名內部功能incrementor
;你可以簡單地使用匿名的「關閉」。您可以使用此作爲
var inc_from_10 = incremenator (value: 10)
inc_from_10() // 10
inc_from_10() // 11
函數返回功能自然在像雨燕一個語言,其中功能是「一流」(分配給變量)。結合泛型類型和一些複雜的形式。
// Return a function to test equality with an obj
func equate<T> (#pred: (T, T) -> Bool) (x:T) -> (T) -> Bool {
return { (y:T) in return pred (x, y) }
}
var equalToTen = equate (pred: ==) (x: 10) // curry syntax
// Return a function to complement a predicate
func complement<T> (#pred : (T) -> Bool) -> (T) -> Bool {
return { (x:T) in return !pred(x) }
}
var notEqualToTen = complement(equalToTen)
// Return a function conjoining two predicates
func conjoin<T> (#pred1: (T) -> Bool, #pred2: (T) -> Bool) -> (T) -> Bool {
return { (x:T) in pred1 (x) && pred2 (x) }
}
,現在您開始使用這些,例如,序列功能,如reduce
,map
和filter
。