如何在Swift 4

时间:2017-09-11 11:14:18

标签: swift currying

我尝试了解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

1 个答案:

答案 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)

代码按预期编译并运行。