Xcode 8 betaを使用すると、2番目の拡張子はコンパイルできません。これが迅速なバグか既知の制限であるかどうかはわかりません。Swiftタイプのシステムがタイプを間違った期待パラメータに変換しようとしています
extension Array {
func scanl<T>(initial: T, combine:(Iterator.Element, T) -> T) -> [T] {
guard let first = self.first else { return [] }
return [initial] + Array(self.dropFirst()).scanl(initial: combine(first, initial), combine: combine)
}
}
extension Array {
func scanl<T>(combine: (Iterator.Element, T) -> T) -> [T] {
guard let first = self.first else { return [] }
return Array(self.dropFirst()).scanl(initial:first, combine:combine)// Cannot convert value of type '(Element, T) -> T' To expected argument type '(_, _) -> _'
}
}
(要素、T) - > Tは実際に関数の型です。 ので、コンパイラは(、)期待する理由を私は理解できない - これはバグや制限はない
私はここで再帰を使うことをお勧めしません。なぜなら、それぞれの呼び出し全体をコピーし、 'O(n^2)'という時間の複雑さにつながるからです。 'for'ループを使うだけで良いでしょう。 –