如何在 Swift 4 中使用函数柯里化

How to use function currying in Swift 4

我试图理解 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))

上面的代码return错误:

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)

代码按预期编译和运行。