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

2024-02-16

我试着去理解函数柯里化教程 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(使用前将#替换为@)

如何在 Swift 4 中使用函数柯里化 的相关文章

随机推荐