我尝试理解函数currying教程但该代码似乎已过时.功能调整还不是很清楚.
我试试这个功能:
func curry<A, B, C>(_ f: @escaping (A, B) -> C) -> (A) -> (B) -> C {
return { a in { b in f(a, b)} }
}
Run Code Online (Sandbox Code Playgroud)
它运行正常Playground (Xcode 9 beta 6).但问题是我无法使用此功能作为教程:
let add = curry(+)
let xs = 1...100
let x = xs.map(add(2))
Run Code Online (Sandbox Code Playgroud)
上面的代码返回错误:
Playground execution failed:
error: FunctionsCurrying.playground:31:17: error: ambiguous use of operator '+'
let add = curry(+)
^
Run Code Online (Sandbox Code Playgroud)
请指正,并帮我澄清一下function currying.
那个问题不是Swift 4相关的,你会在Swift 3中得到相同的错误信息.
+因此,有许多重载运算符
let add = curry(+)
Run Code Online (Sandbox Code Playgroud)
编译器不知道选择哪一个.使用显式类型转换
let add = curry((+) as ((Int, Int) -> Int))
Run Code Online (Sandbox Code Playgroud)
或显式类型注释
let op: (Int, Int) -> Int = (+)
let add = curry(op)
Run Code Online (Sandbox Code Playgroud)
代码编译并按预期运行.
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |