学習の練習として、私はUnderscore.jsのユーティリティ関数の一部を素早く移植していますが、コレクション内の要素が指定されたコレクションブロックを通過するとtrueを返すsome
から始まります。Underscoreのいくつかの機能を迅速に移植する
ナイーブな実装:
extension Sequence {
func some(_ predicate: (Self.Iterator.Element) -> Bool) -> Bool {
return reduce(false) { $0 || predicate($1) }
}
}
に私は、しかし、STLの機能の多くはthrows
とrethrows
が含まれていることに気づきました。偉大な例では、関数のシグネチャを持つfilter
機能である:
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
誰かがまたthrow
とrethrows
機能を活用しながら、some
機能を作成する方法を見せてもらえますか?
私はすでにそれを試しましたが、 "コールはスローすることができますが、試しにマークされていません"というコンパイルに失敗します。私は実際に 'map'と' reduce'を組み合わせて使ってどのように達成するかを考えました。共有する答えを投稿します。 – barndog
私は述語の呼び出しの前に '試行 'を入れるのを忘れていました。私はコードを更新します。 –