gpt4 book ai didi

arrays - 为什么在数组扩展中使用 Stride 非法创建临时数组

转载 作者:行者123 更新时间:2023-12-05 01:54:09 28 4
gpt4 key购买 nike

此代码会引发编译器错误:“参数类型‘StrideTo’应为类或类约束类型的实例”

extension Array {
func chunks(_ chunkSize: Int) -> [[Element]] {
let indexes = Array(stride(from: 0, to: count, by: chunkSize)) // This line won't compile
return [[Element]]()
}
}

但是,如果您在数组扩展之外使用非常相似的代码:

let array = Array(stride(from: 0, to: 20, by: 4))

它给出了我所期望的,一个数组 [0, 4, 8, 12, 16]

为什么在数组扩展的函数中创建临时数组是非法的?它是否以某种方式在数组上调用 stride() 实例方法?如果是这样,有没有办法告诉编译器我想改为调用全局 stride() 函数?

最佳答案

这是一个错误:SR-13847 Wrong generic used in extensions :

For some reason when calling initializer in extension, compiler tries to match unrelated generics.

在你的例子中,Array被解释为 Array<Element> .作为解决方法,您可以明确指定索引数组的类型:

let indexes = Array<Int>(stride(from: 0, to: count, by: chunkSize))

关于arrays - 为什么在数组扩展中使用 Stride 非法创建临时数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70806989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com