【发布时间】:2014-11-10 01:15:47
【问题描述】:
我正在尝试将常规函数转换为 curry 函数但得到 Execution was interrupted
下面是我对函数进行柯里化并执行 unsafeBitCast 以使用一个参数调用函数并稍后使用第二个参数调用它的代码。
func curry<T>(f: (T, T) -> T) -> T -> T -> T {
return { a in
typealias Function = (T) -> (T -> T)
let fn = unsafeBitCast(f, Function.self)
return curry(fn(a))
}
}
func curry<T>(f: T -> T) -> T -> T {
return { f($0) } // Throws Runtime Exception
}
func adder(x: Int, y: Int) -> Int {
return x + y
}
let adderCurry = curry(adder)
let add1 = adderCurry(1)
add1(2)
有谁知道如何将具有两个或多个参数的常规函数转换为咖喱函数
func add(x: Int)(y: Int) -> Int {
return x + y
}
编辑:这个例子也不起作用
func curry<T>(f: (T, T) -> T) -> T -> T -> T {
typealias Function = T -> T -> T
return unsafeBitCast(f, Function.self)
}
func adder(x: Int, y: Int) -> Int {
return x + y
}
let adderCurry = curry(adder)
let add1 = adderCurry(1)
add1(2)
【问题讨论】:
-
该问题的解决方案是通过编写代码手动进行转换。我正在寻找一种使用 unsafeBitCast 以编程方式将常规函数类型转换为 curry 函数的方法。