Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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,我试图用swift编写一个带有递归体的函数文本——在本例中,它只是将所有值添加到一个列表中。我得到一个错误,“变量在它自己的初始值中使用”。你有什么想法吗?我也知道我在这里做的是一个简单的reduce,它是构建到数组中的,我只是用它作为我在其他地方看到的示例 let list: Slice = [1,2,3,4,5,6,7,8,9,10] var closure = { (memo: Int, list: Slice<Int>) -> Int in if (list.

我试图用swift编写一个带有递归体的函数文本——在本例中,它只是将所有值添加到一个列表中。我得到一个错误,“变量在它自己的初始值中使用”。你有什么想法吗?我也知道我在这里做的是一个简单的reduce,它是构建到数组中的,我只是用它作为我在其他地方看到的示例

let list: Slice = [1,2,3,4,5,6,7,8,9,10]

var closure = { (memo: Int, list: Slice<Int>) -> Int in
    if (list.count == 0) {
        return memo
    } else {
        return closure(memo + list[0], list[1..<list.count])
    }
}

let value = closure(0,list)
let list:Slice=[1,2,3,4,5,6,7,8,9,10]
var closure={(备注:Int,列表:Slice)->Int in
如果(list.count==0){
回执
}否则{
返回结束(备注+列表[0],列表[1..尝试以下操作:

let list: Slice = [1,2,3,4,5,6,7,8,9,10]

var closure:((Int, Slice<Int>) -> Int)!
closure = { (memo, list) in
    if (list.count == 0) {
        closure = nil // remove retain cycle
        return memo
    } else {
        return closure(memo + list[0], list[1..<list.count])
    }
}

let value = closure(0, list)
let list:Slice=[1,2,3,4,5,6,7,8,9,10]
var闭包:((Int,Slice)->Int)!
关闭={(备忘录,列表)在
如果(list.count==0){
关闭=零//删除保留周期
回执
}否则{
返回结束(备注+列表[0],列表[1..尝试以下操作:

let list: Slice = [1,2,3,4,5,6,7,8,9,10]

var closure:((Int, Slice<Int>) -> Int)!
closure = { (memo, list) in
    if (list.count == 0) {
        closure = nil // remove retain cycle
        return memo
    } else {
        return closure(memo + list[0], list[1..<list.count])
    }
}

let value = closure(0, list)
let list:Slice=[1,2,3,4,5,6,7,8,9,10]
var闭包:((Int,Slice)->Int)!
关闭={(备忘录,列表)在
如果(list.count==0){
关闭=零//删除保留周期
回执
}否则{

返回结束(memo+list[0],list[1..我知道这很旧,但我找到了另一种选择:

let list : ArraySlice<Int> = [1,2,3,4,5,6,7,8,9,10]

let closure = { (Void) -> ((Int, ArraySlice<Int>) -> Int) in
   func f(memo: Int, list: ArraySlice<Int>) -> Int {
      if (list.count == 0) {
        return memo
      } else {
        return f(memo + list[list.startIndex], list: list[(list.startIndex + 1)..<list.endIndex])
      }
   }
   return f
}()

let value = closure(0, list)
let list:ArraySlice=[1,2,3,4,5,6,7,8,9,10]
让闭包={(Void)->(Int,ArraySlice)->Int)在
func f(备注:Int,列表:ArraySlice)->Int{
如果(list.count==0){
回执
}否则{

返回f(memo+list[list.startIndex],list:list[(list.startIndex+1)…我知道这很旧,但我找到了另一种选择:

let list : ArraySlice<Int> = [1,2,3,4,5,6,7,8,9,10]

let closure = { (Void) -> ((Int, ArraySlice<Int>) -> Int) in
   func f(memo: Int, list: ArraySlice<Int>) -> Int {
      if (list.count == 0) {
        return memo
      } else {
        return f(memo + list[list.startIndex], list: list[(list.startIndex + 1)..<list.endIndex])
      }
   }
   return f
}()

let value = closure(0, list)
let list:ArraySlice=[1,2,3,4,5,6,7,8,9,10]
让闭包={(Void)->(Int,ArraySlice)->Int)在
func f(备注:Int,列表:ArraySlice)->Int{
如果(list.count==0){
回执
}否则{

返回f(memo+list[list.startIndex],list:list[(list.startIndex+1)…谢谢,似乎诀窍是必须先声明闭包变量,然后再赋值。你知道这是一个bug还是一个特性吗?我想这是一个特性。编译器只拒绝“在它自己的初始值中使用变量”,这正是我们可以避免它的方法。声明类型为
的变量将初始化为
nil
,这是“初始值”。然后,作为一种正常的闭包行为,可以从闭包内部看到修改后的
闭包
值。@BrandonRoth:因为闭包在创建闭包时捕获闭包内部使用的外部局部变量,而闭包是由
{…}创建的
expression,在赋值给变量之前
closure
。因此,闭包必须捕获一些东西,它必须捕获赋值之前已经存在的变量。该链接中没有名为“advanced swift”的视频。谢谢,似乎诀窍在于必须先声明闭包变量,然后再赋值。你知道这是一个bug还是一个功能吗?我认为这是一个功能。编译器只拒绝“在它自己的初始值中使用变量”,这正是我们可以避免它的方法。声明类型为
的变量将初始化为
nil
,这是“初始值”。然后,作为一种正常的闭包行为,可以从闭包内部看到修改后的
闭包
值。@BrandonRoth:因为闭包在创建闭包时捕获闭包内部使用的外部局部变量,而闭包是由
{…}创建的
expression,在赋值给变量之前
closure
。因此,闭包必须捕获某些东西,它必须捕获赋值之前已经存在的变量。该链接中没有名为“advanced swift”的视频。