Swift中的高阶函数

时间:2018-02-14 02:45:03

标签: swift generics closures

最近,我在Wiki中遇到了以下高阶函数示例: https://en.wikipedia.org/wiki/Higher-order_function#Swift

但我无法理解这个功能。任何人都可以解释一下代码吗?

// generic function
func twice<T>(_ v: @escaping (T) -> T) -> (T) -> T {
    return { v(v($0)) }
}

// inferred closure
let f = { $0 + 3 }

twice(f)(10) // 16

1 个答案:

答案 0 :(得分:6)

twice接受函数v,并返回一个复合v功能的新函数。基本上,如果您有v函数,则调用twice(v)(someValue)与调用v(v(someValue))相同。

// inferred closure
let f = { $0 + 3 }

twice(f)(10)
//=> f(f(10)) 
//=> { $0 + 3 }(f(10)) 
//=> { $0 + 3 }({ $0 + 3 }(10)) 
//=> { $0 + 3 }(10 + 3)
//=> { $0 + 3 }(13)
//=> 13 + 3
//=> 16