完全な回答については、ビルダーに関するかなり長い質問と回答を参照してください (注: 2012 年 9 月の時点で、Miles の代替バージョンは 2.9 または最新の 2.10 では動作しません)。
これは、開始するためのフレームワークです (SO に表示するために過度に長い行を避けるために、明示的および暗黙的なパラメーター ブロックの奇妙な書式設定に注意してください)。
import collection.generic.CanBuildFrom
case class UsefulData(data: Int) {}
def lookerUpper[C[String]](
ids: C[String], someOtherInfo: Int
)(
implicit cbf: CanBuildFrom[C[String],UsefulData,C[UsefulData]],
ev: C[String] => Iterable[String]
): C[UsefulData] = {
val b = cbf()
val i = ev(ids)
i.foreach{ s => b += UsefulData(s.length + someOtherInfo) }
b.result
}
そして、それが機能することを観察してください:
scala> lookerUpper(Vector("salmon","cod"),2)
res0: scala.collection.immutable.Vector[UsefulData] =
Vector(UsefulData(8), UsefulData(5))
scala> lookerUpper(Array("salmon","cod"),2)
res1: Array[UsefulData] =
Array(UsefulData(8), UsefulData(5))
TraversableLike
編集:(そうではない)のサブクラスのみを気Array
にし、標準のコレクション操作を使用してすべての作業を行う場合は、Luigiが指摘するように8609398への回答を使用できます。(おそらく、この回答を別の視点としてそこに移動する必要があります。)