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_Functional Programming - Fatal编程技术网

功能性Swift返回错误

功能性Swift返回错误,swift,functional-programming,Swift,Functional Programming,为什么r1工作但r2抛出编译错误(无法使用类型为“(NSArray,[Int])的参数列表调用“+”) func-reduce(输入:[T1],初始结果:T2,f:(T2,T1)->T2)->T2{ var result=initialResult 对于输入中的x{ 结果=f(结果,x) } 返回结果 } 设array2D=[[1,2,3],[4,5,6],[7,8,9]] 设r1=reduce(array2D,[]){result,x in 结果+x} 设r2=reduce(array2D,[

为什么r1工作但r2抛出编译错误(无法使用类型为“(NSArray,[Int])的参数列表调用“+”)

func-reduce(输入:[T1],初始结果:T2,f:(T2,T1)->T2)->T2{
var result=initialResult
对于输入中的x{
结果=f(结果,x)
}
返回结果
}
设array2D=[[1,2,3],[4,5,6],[7,8,9]]
设r1=reduce(array2D,[]){result,x in
结果+x}
设r2=reduce(array2D,[]){result,x in
返回结果+x}

如果您指定返回类型,它将消除此错误,例如:

let r3 = reduce(array2D, []){result, x -> [Int] in
    return result + x}

如果指定初始空数组是
Int
数组,则错误将被消音:

let r4 = reduce(array2D, [Int]()){result, x in
    return result + x}

谢谢,我从未想过使用[Int]。我想编译器有时需要一些帮助来推断数组类型。奇怪的是,它可以在r1中正确推断,但不能在r2中正确推断。我非常依赖类型推断,在泛型扩展中使用复杂的
map
函数进行函数编程时,我偶然发现了类似的问题。它被弄糊涂了,指定了返回类型就把它清理干净了。
let r4 = reduce(array2D, [Int]()){result, x in
    return result + x}