スウィフトコードの適切な量を書いたにもかかわらず、スウィフトコードがどのように動作するのか説明することなく、クールスウィフト技術のこの例にぶつかりました。複雑なSwiftismsのそれは現在、私の頭の周りにねじれている。このスウィフトハッカーを理解するのに役立つでしょう
スウィフトに十分堪能な人が、それを解剖してその目的を分別していないのであれば、それは本当に自分の言語の理解力とより強力な機能を増やし、おそらく他の人も啓発するでしょう。
extension Array {
var match : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil
}
}
func map<A, B>(f: A -> B, arr: [A]) -> [B] {
if let (head, tail) = arr.match {
return [f(head)] + map(f, tail)
} else {
return []
}
}
ふみます。前にSwiftを使ったことはありませんが、私はそれを読むことができると思います。どの部分が問題を与えていますか? – melpomene
質問がいくつかあります。 で「宣言されている」ため、AとBがどのように型であり、それらが型でどのように使用されているかを理解しています。しかし、誰かがArrayのソースコードを見て、何かを知っていない限り、明示的に宣言されずに、TがArrayエクステンションのmatch関数で計算されたプロパティの型としてどのように使われるか分かりません。 – clearlight
'Array'は*ジェネリック*型で、Swift2では' T'の型ホルダでした。これはSwift3で 'Element'と呼ばれています。 –