上位汎用関数を別の汎用関数にパラメータとして渡そうとしています。しかし、私はそれを機能させることができません。以下は私が達成しようとしているもののサンプルコードです。高次関数をパラメータとして渡すときにスカラのジェネリック型の不一致エラーが発生する
def foo[T](data: Seq[T]) = {
//some codes
}
def bar[U](id: Sring, fn: Seq[U] => Unit) = {
criteria match {
case x => data:Seq[String] = //some data;
fn(data)
case b => data:Seq[Int] = //some data;
fn(data)
case c => data:Seq[Char] = //some data;
fn(data)
}
}
bar("123", foo)
私は、コードを実行すると、私はエラーを取得します - 型の不一致を -
bar
をされることは意味がないのSeq [文字列]
bar()がfn()を動的に呼び出すとどうなりますか?すなわち、foo()への条件に従って異なるデータ型シーケンスを渡すことができる。 Seq [String]、Seq [Int]、Seq [Char]などを更新しました。 –
@RaKaこれはまったく異なる質問です。あなたはクラスタグが必要です:http://stackoverflow.com/questions/5400394/how-to-get-the-actual-type-of-a-generic-type実際に何を達成しようとしていますか?ジェネリックスを使わなくてもコードを大幅に簡略化することができます – nmat