5

ジェネリック関数のコレクションが必要ですが、好きなように実行できません。私は作成しました

List[(Any)=>Unit]

しかし、関数を挿入しようとするとすぐに、たとえば

String=>Unit

エラーが発生します。パラメータと戻り値の型を考慮しないジェネリック関数コレクションを宣言するにはどうすればよいですか?

4

2 に答える 2

11

関数は、入力タイプのパラメーターで反変です。たとえば、あなたの場合Function1[-T1,+R]です。つまり、のインスタンスをに追加できますが、Any => UnitそのList[String => Unit]逆はできません。Stringもちろん、これは、型の引数と型の引数を期待する関数を呼び出すことができないため、理にかなっていますAny

于 2010-07-31T16:27:43.907 に答える
9

の答えを終えるには、リスト内のすべての関数の入力型のサブタイプである@Moritz型引数を選択する必要があります。法案に適合します-それはすべてのタイプのサブタイプです。T1Nothing

scala> val l: List[Nothing => Any] = List((b: String) => b, (a: Int) => a)
l: List[(Nothing) => Any] = List(<function1>, <function1>)

実存型も機能します。

scala> val l: List[_ => _] = List((b: String) => b, (a: Int) => a)        
l: List[Function1[_, _]] = List(<function1>, <function1>)
于 2010-07-31T17:10:36.417 に答える