我有函数curry
,它将函数(A, B) -> C
作为参数,并返回A -> B -> C
。它在函数g(a: Int, b: Int) -> Int
上工作正常。此外,我有函数f
,这是多态的,所以它的类型是不明确的。这是代码:
func g(a: Int, b: Int) -> Int { return a + b }
func f(a: Int, b: Int) -> Int { return a + b }
func f(a: Float, b: Float) -> Float { return a + b }
func curry<A, B, C>(f: (A, B) -> C) -> A -> B -> C {
return { a in { b in f(a, b) } }
}
let curriedG = curry(g) //curriedG type Int -> Int -> Int
let curriedF = curry(f) //Error, Ambigous use of 'f(_:b:)'
很明显,我无法做curry(f)
,但是,有什么方法,我可以指定,我想使用特定的f()
实现吗?
为什么我需要这个。
因为初始化者。我想讨论特定的初始化,假设struct A
有两个初始化者:init(t: T, y: Y)
和init(u: U, h: H)
,我想讨论其中一个。
谢谢!
答案 0 :(得分:1)
由于$.ajax({
type: "POST",
url: serviceName + "/" + div,
data: "{'div':'" + div + "', 'currentPageString':'" + currentPage + "', 'pageSizeString':'" + pageSize + "','filter':'" + filter + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
processdata: true,
success: function(msg) {
ServiceSucceeded(msg, div);
},
error: function(msg) {
ServiceFailed(msg);
}
});
已超载,您必须指定所需的f
:
f
或者,结果应该是什么:
let curriedF = curry(f as (Float, Float) -> Float)