ジェネリック関数のコレクションが必要ですが、好きなように実行できません。私は作成しました
List[(Any)=>Unit]
しかし、関数を挿入しようとするとすぐに、たとえば
String=>Unit
エラーが発生します。パラメータと戻り値の型を考慮しないジェネリック関数コレクションを宣言するにはどうすればよいですか?
ジェネリック関数のコレクションが必要ですが、好きなように実行できません。私は作成しました
List[(Any)=>Unit]
しかし、関数を挿入しようとするとすぐに、たとえば
String=>Unit
エラーが発生します。パラメータと戻り値の型を考慮しないジェネリック関数コレクションを宣言するにはどうすればよいですか?
関数は、入力タイプのパラメーターで反変です。たとえば、あなたの場合Function1[-T1,+R]
です。つまり、のインスタンスをに追加できますが、Any => Unit
そのList[String => Unit]
逆はできません。String
もちろん、これは、型の引数と型の引数を期待する関数を呼び出すことができないため、理にかなっていますAny
。
の答えを終えるには、リスト内のすべての関数の入力型のサブタイプである@Moritz
型引数を選択する必要があります。法案に適合します-それはすべてのタイプのサブタイプです。T1
Nothing
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>)