を暗黙的に(私は通常 -を明示的に使用します)に変換する場合は、十分に注意する必要があります。この理由は、結果を期待するメソッド(または関数)に渡すことにより、プログラムが破損する可能性がある範囲で結果を制御できなくなるためです。これが1つの例です:Iterator
Iterable
Iterator.toList
Iterable
def printTwice(itr : Iterable[String]) : Unit = {
itr.foreach(println(_))
itr.foreach(println(_))
}
Iterator
が何らかの形で暗黙的にに変換可能である場合Iterable
、次は何を出力しますか?
printTwice(Iterator.single("Hello"))
(もちろん)Helloを1回だけ印刷します。ごく最近、とtrait
TraversableOnce
を統合するコレクションライブラリにが追加されました。私の考えでは、これは間違いなく間違いです。Iterator
Iterable
私の個人的な好みは、Iterator
可能な限り明示的に使用してList
から、Set
またはIndexedSeq
直接使用することです。渡されるタイプに完全に依存しないメソッドを作成することはめったにないことがわかりました。一例:
def foo(trades: Iterable[Trade]) {
log.info("Processing %d trades", trades.toList.length) //hmmm, converted to a List
val shorts = trades.filter(_.side.isSellShort)
log.info("Found %d sell-short", shorts.toList.length) //hmmm, converted to a List again
//etc