函数返回函数,并使用Swift中的数组调用接受可变参数的函数
我正在尝试制作一个类似于Lodash的咖喱函数 不幸的是,我得到了两个编译错误函数返回函数,并使用Swift中的数组调用接受可变参数的函数,swift,Swift,我正在尝试制作一个类似于Lodash的咖喱函数 不幸的是,我得到了两个编译错误 func curry(fun: (Any...)) -> ((Any...) -> (Any)) { let count = fun.0.count var resultArgs: Any[] = [] func generator(newArgs: Any...) -> ((Any...) -> (Any))? { for (index, elem)
func curry(fun: (Any...)) -> ((Any...) -> (Any)) {
let count = fun.0.count
var resultArgs: Any[] = []
func generator(newArgs: Any...) -> ((Any...) -> (Any))? {
for (index, elem) in enumerate(newArgs) {
if resultArgs.count >= count {
break
} else {
resultArgs += elem
}
}
if resultArgs.count >= count {
// fun(resultArgs)
// Commenting fun now cause that throws a compile error saying array cannot be passed in Variadic parameter function
return nil
} else {
return generator
}
}
return generator
}
这里有两个问题:
fun
performSelector
1. While emitting IR SIL function @_TTRXFt_oGSaP__oBolGSaP__dSioXFo_oGSaP___oGSqFtGSaP___P____oGSqFtGSaP___P___XFo_oGSaP___oGSqFtGSaP___P___ for 'generator'
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
1。发射IR SIL功能时,为“发电机”发射TTRXFt\u oGSaP\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuxfo\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
:0:错误:无法执行命令:分段错误:11
:0:错误:swift前端命令因信号而失败(使用-v查看调用)
命令/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/swift失败,退出代码254
这是我最接近于接受多个参数的一次。根据为curry2
给出的错误消息,它似乎将参数视为元组
func curry<T, U>(fun: (T) -> U) -> (T)->U {
return fun
}
func curry2(fun: (Any...) -> Any) -> (Any...)->Any {
return fun
}
func to_curry(a: Int, b: Int) -> Int { return a + b }
func test() {
curry(to_curry)(3, 5) // returns 8
curry2(to_curry)(3, 5)
// tuple types '(Any...)' and '(Int, Int)' have a
// different number of elements (1 vs. 2)
}
您拥有的解决方案不是咖喱函数。只有当您同时传递两个参数时,它才起作用,然后我将直接调用该函数。我想做的是让add3=curry(to_curry)(3),然后你可以调用add3(5),它将返回8I。我只是设法接受了不同数量的参数,没有得到任何进一步不幸的是。Swift编译器现在有很多错误。像您这样在其内部使用嵌套函数是导致编译器崩溃的原因之一。e、 g.
func foo(){func bar(){bar()}
let tuple = (1, 2)
let count = sizeofValue(tuple)/sizeof(Int)