【问题标题】:Swift's GeneratorOf<T> crazy initSwift 的 GeneratorOf<T> 疯狂初始化
【发布时间】:2023-03-13 20:16:02
【问题描述】:

GeneratorOf 创建一个通用的Generator(和Sequence):

struct GeneratorOf<T> : Generator, Sequence {
    init(_ next: () -> T?)
    init<G : Generator where T == T>(_ self_: G)
    func next() -> T?
    func generate() -> GeneratorOf<T>
}

我不明白的行是第二个init:

init<G : Generator where T == T>(_ self_: G)

到底为什么要声明T == T??

(_ self_: G) 是什么意思??

谢天谢地,Swift 的主要优势之一是语法比 Objective C 简单得多... :-P

【问题讨论】:

    标签: cocoa swift


    【解决方案1】:

    这是 Swift stdlib 标头自动生成器中的一个错误。在解析类型时,它们会在某些不应该替换的地方替换等效类型。这里的实际定义应该是:

    init<G : Generator where Generator.Element == T>(_ self_: G)
    

    但由于Generator.ElementT 相同,因此该工具会替换它。 Apple 一直在努力解决这个问题。

    (_ self_: G) 是标准语法,尽管这是我在其他地方没有见过的公认的不寻常风格,除了SequenceOf,它可能是由同一个人编写的。我怀疑这只是开发人员命名变量的方式,而不是具有更深层次的含义。

    请记住,stdlib 标头不是“普通”标头。 Swift 没有标题。 Apple 采用了一种特殊的 Apple 专用技巧来允许这样做。

    Chris Lattner commented on this in the devforms.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多