Swift的GeneratorOf<T>疯狂的初始化

4

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

1个回答

5
这是Swift stdlib头文件自动生成器中的一个bug。在解析类型时,它们会替换一些不应该替换的等效类型。实际上,这里的定义应该是:
init<G : Generator where Generator.Element == T>(_ self_: G)

但是由于Generator.ElementT相同,该工具将其替换。苹果一直在努力解决这个问题。

(_ self_: G)是标准语法,虽然是一种我从未见过的不寻常风格,除了SequenceOf之外,可能是由同一个人编写的。我怀疑这只是开发人员命名变量的方式,而没有更深层次的含义。

请记住,stdlib头文件不是“普通”头文件。Swift没有头文件。苹果公司使用特殊的仅适用于苹果的技巧来允许一个头文件。

Chris Lattner在devforms中对此进行了评论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接