gpt4 book ai didi

swift - 通用 LazyCollection 类型

转载 作者:搜寻专家 更新时间:2023-11-01 07:29:46 26 4
gpt4 key购买 nike

我需要一个函数来返回一个惰性生成器,该生成器由各种组合的生成器函数(例如过滤器和映射)组成。例如,如果我想申请 lazy.filter().map()代码如下:

// Simplified
typealias MyComplexType = Int
typealias MyComplexCollection = [MyComplexType]

func selection() -> LazyMapCollection<LazyFilterCollection<MyComplexCollection>, Int> {
let objects:MyComplexCollection = [1, 2, 3, 4, 5, 6]
let result = objects.lazy.filter({$0 < 4}).map({$0 * 10})

return result
}

for obj in someObjects() {
print(obj)
}

是否有更通用的方法来指定 LazyMapCollection<LazyFilterCollection<MyComplexCollection>, Int> ?我试过 LazyGenerator<MyComplexCollection>但我收到类型不兼容错误。链接更多惰性函数会使类型更加复杂。更好、更适合我的需要的是拥有类似于 LazySomething<MyComplexType> 的类型.

最佳答案

是的!

你想要的存在,甚至有一个花哨的名字:“type-erasure”

Swift 有一些结构可以转发调用,但不会暴露(尽可能多的)底层类型:

  • 任何双向集合
  • 任意双向索引
  • AnyForwardCollection
  • 任意转发索引
  • 任何发电机
  • 任何随机访问集合
  • 任何随机访问索引
  • 任何序列

所以你想要类似的东西

func selection() -> AnySequence<MyComplexType> {
let objects:MyComplexCollection = [1, 2, 3, 4, 5, 6]
let result = objects.lazy.filter({$0 < 4}).map({$0 * 10})

return AnySequence(result)
}

(因为你对 say subscript(2) 的调用被转发了,懒惰得以保留,这有时好,有时坏)

但是 AnyForwardCollection 在实践中可能会更好,因为它会缺少许多在使用惰性集合时使人们感到困惑的方法。

关于swift - 通用 LazyCollection 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33382765/

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