Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数返回函数,并使用Swift中的数组调用接受可变参数的函数_Swift - Fatal编程技术网

函数返回函数,并使用Swift中的数组调用接受可变参数的函数

函数返回函数,并使用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)

我正在尝试制作一个类似于Lodash的咖喱函数

不幸的是,我得到了两个编译错误

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
}
这里有两个问题:

  • 由于某种原因,发电机功能出现分段故障。此函数背后的思想是获取参数并返回一个新函数,或者根本不返回任何内容,并计算传递到curry函数中的函数
    fun
  • 将参数数组传递给接受可变参数的函数。这应该是一种语言,因为我们可以使用Objective-C中的
    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)