我尝试了解function currying tutorial,但该代码似乎已过时。功能调整还不是很清楚。
我尝试使用此功能:
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
。
答案 0 :(得分:9)
这个问题与Swift 4无关,你会得到同样的错误 Swift 3中的消息。
有许多重载的+
运算符,因此在
let add = curry(+)
编译器不知道选择哪一个。使用显式类型 投
let add = curry((+) as ((Int, Int) -> Int))
或显式类型注释
let op: (Int, Int) -> Int = (+)
let add = curry(op)
代码按预期编译并运行。