Scala コードを書いていると、要素のコレクションに対して反復的に動作する「プロセッサ」関数があり、コレクションの長さを知る必要がある場合に定期的に遭遇します。
一方、コレクションを生成する「プロバイダー」機能があるため、すでに長さを知っています。生成されたコレクションはList[T]
、Array[T]
またはSet[T]
などですが、 の場合でもList[T]
、私のジェネレーターはサイズを知っています (List
型がそれを格納していなくても)。
したがって、「プロセッサ」関数は、すべてのコレクション型に適合すると思われる最も一般的な型 をパラメーターとして取るものとして自然に宣言しIterable[T]
ます。ただし、その後、内部的に O(N) のコストで反復コレクション トラバーサルを介してサイズを調べる必要があり、これは望ましくありません。
したがって、私の素朴な解決策は、次のような新しい型を作成しIterableWithSize[T]
、プロバイダーとプロセッサの関数にこの型を作成して取得させることです。どちらSeq[T]
もIndexedSeq[T]
法案に合わないようです。しかし、これは比較的一般的な使用例のように思われるので、もっと慣用的な方法があるのではないかと思います。それは何でしょう?