如何在 Swift 4 中使用函数柯里化
How to use function currying in Swift 4
我试图理解 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))
上面的代码return错误:
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)
代码按预期编译和运行。
我试图理解 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))
上面的代码return错误:
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)
代码按预期编译和运行。