最近,我在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
答案 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