微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift 4中使用函数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(+)
                    ^

请纠正我并帮助我清楚功能currying.

那个问题不是Swift 4相关的,你会得到同样的错误
Swift 3中的消息.

因此,有许多重载运算符

let add = curry(+)

编译器不知道选择哪一个.使用显式类型

let add = curry((+) as ((Int,Int) -> Int))

或显式类型注释

let op: (Int,Int) -> Int = (+)
let add = curry(op)

代码编译并按预期运行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐