2016-07-21 5 views
0

extractValuesに含まれる正しいタイプを返すにはどうすればよいですか?リストまたはオプションのマッチングタイプを返す

trait Ok[T] 
case class OkSingle[U](value: Option[U]) extends Ok[U] 
case class OkList[U](value: List[U]) extends Ok[U] 

def extractValues[T](o: Ok[T]): Traversable[T] = o match { 
    case OkList(l) => l 
    case OkSingle(v) => v 
} 

extractValues(OkSingle(Option(1))) // 1 
extractValues(OkList(List(1)))  // 2 

(1)及び(2)List(1)を返します。私は(1)がSome(1)を返すようにしたい。おそらく私はcase classtraitデザイン全体を再定義する必要があります。ありがとう。

答えて

1

あなたの戻り値の型として代わりにTraversable[T]の利用Product

def extractValues[T](o: Ok[T]): Product = o match { 

あなたはTraversableする戻り値の型を宣言しているので、Scalaのコンパイラを使用すると、両方でList(1)を得ている理由であることTraversableOptionを変換するOption.option2Iterable暗黙的な変換を使用していますケース。

特性Productは、ListOptionの両方に混在していますので、適切な結果が得られるはずです。

関連する問題