2016-04-11 7 views
3

私はタイプSomeType[T]のオブジェクトを持っています。いくつかはSomeType[String]のように、いくつかはSomeType[Int]などです。これらの可変サイズのセットを取得する関数を記述したいと思いますが、さまざまな型の可能性があります。異なるタイプの可変サイズの入力

私はタイプが、私は次のようなものを使用することができ、すべて同じであることを知っている場合:

def someFun[T](inputs: SomeType[T]*): = { 
    // do something here on the list of inputs. 
} 

任意のアイデアをどのように一般的な、それは潜在的に異なる種類の入力のリストを取得するように作るには? (例えばinputs: SomeType[String]inputs: SomeType[Int]) 私は後でタイプ情報が必要なのでSomeType[_]を使用したくありません。

+1

このメソッドはどのような型を返しますか?ワイルドカード 'SomeType [_]'を使うことができますが、タイプ情報は失われてしまいます。その答えは実際にそのメソッドの本体に必要なものに依存します。あなたが本質的に探しているのはKリストです。 –

+0

良い点。後でタイプ情報が必要なので、私は '_'を行うことはできません: -/ – Daniel

+0

シェープレス '[HList](https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0)を見てください。 .0#異種リスト)。 – Aivean

答えて

1

タイプ情報が必要なのかどうか分かりませんが、入力に直接反応するだけであれば(例えば、別の関数などに渡すことなく)、次のように動作します:

case class Box[A](a: A) 

def someFun(boxes: Box[_]*) = 
    boxes.foreach { 
    case Box(a: Int) => println(s"INT: $a") 
    case Box(a: String) => println(s"STRING: $a") 
    case _ => // and so on ... 
    } 

AFAIK、シェイプレスのHListはこれを解決することはできませんが、まだタイプアップが必要です。

+0

非常に良い提案。しかし問題は、私が先験的に可能なタイプを知らないということです。しかし、私はクライアントに何とかそれらを渡すように頼むことができます。可変サイズの型タグにも可能ですか? – Daniel

関連する問題