我想用递归体在swift中编写函数文字 - 在这种情况下,它只是将所有值添加到列表中。我收到一个错误,“变量在它自己的初始值中使用”。有什么想法可能是错误的吗?另外我知道我在这里做的是一个简单的减少,它被构建到Array中,我只是将它用作我在其他地方看到的示例。快速匿名函数递归
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)
谢谢,看来关键是,封闭变量都将被声明,然后再进行分配。你知道这是一个错误还是一个功能? – Brandon 2014-10-20 18:03:44
我认为这是一项功能。编译器只会拒绝“在它自己的初始值内使用的变量”,这就是我们如何避免它。用'!'类型声明变量将被初始化为'nil',这是“初始值”。然后,作为一个正常的关闭行为,可以从关闭内部看到修改的“关闭”值。 – rintaro 2014-10-20 18:09:31
查看我的编辑答案 – rintaro 2014-10-20 18:49:54