2014-09-12 10 views
4

GeneratorOf創建一個通用Generator(和Sequence):斯威夫特的GeneratorOf <T>瘋狂的init

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

我不懂行是第二初始化:

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

爲什麼地球上是否有必要說明T == T ??

這是什麼(_ self_: G)應該表示?

謝天謝地的是雨燕的一個主要優點是比目標C更簡單的語法...... :-P

回答

5

這是斯威夫特STDLIB頭自動生成的錯誤。在解析類型時,它們在某些不應該使用的地方替換等效類型。這裏實際的定義應該是:

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

但由於Generator.Element相同T,該工具替換它。蘋果一直在努力解決這個問題。

(_ self_: G)是標準語法,雖然是我在其他地方還沒有見過的一種公認的不尋常風格,除了SequenceOf,它可能是由同一個人編寫的。我懷疑這只是開發人員如何命名變量,而不是具有更深層次的意義。

請記住,stdlib標題不是「正常」標題。 Swift沒有標題。蘋果公司做了一個特殊的蘋果專用技巧來允許一個。

Chris Lattner commented on this in the devforms.