我试着去理解函数柯里化教程 https://robots.thoughtbot.com/introduction-to-function-currying-in-swift但该代码似乎已经过时了。关于函数柯里化仍然不太清楚。
我尝试使用这个功能:
func curry<A, B, C>(_ f: @escaping (A, B) -> C) -> (A) -> (B) -> C {
return { a in { b in f(a, b)} }
}
它运行正常Playground (Xcode 9 beta 6)
。但问题是我不能使用这个函数作为教程:
let add = curry(+)
let xs = 1...100
let x = xs.map(add(2))
上面的代码返回错误:
Playground execution failed:
error: FunctionsCurrying.playground:31:17: error: ambiguous use of operator '+'
let add = curry(+)
^
请纠正我并帮助我澄清function currying
.
这个问题与 Swift 4 无关,你会得到同样的错误
Swift 3 中的消息。
有很多超载的+
运算符,因此在
let add = curry(+)
编译器不知道选择哪一个。具有显式类型
投掷
let add = curry((+) as ((Int, Int) -> Int))
或显式类型注释
let op: (Int, Int) -> Int = (+)
let add = curry(op)
代码按预期编译并运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)