我尝试理解
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中的消息.
Swift 3中的消息.
因此,有许多重载运算符
let add = curry(+)
编译器不知道选择哪一个.使用显式类型
投
let add = curry((+) as ((Int,Int) -> Int))
或显式类型注释
let op: (Int,Int) -> Int = (+) let add = curry(op)
代码编译并按预期运行.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。