関数リテラルでジェネリック型パラメーターを許可する構文はありますか? 次のような方法でラップできることはわかっています。
def createLongStringFunction[T](): (T) => Boolean = {
(obj: T) => obj.toString.length > 7
}
しかし、すべての型 T に対してメソッドを呼び出し、新しい関数を取得する必要があります。言語リファレンスを調べたところ、関数リテラル構文がコンパイラによって、それ自体が汎用入力型を持つFunctionnオブジェクトのインスタンスに変換されていることがわかりますが、コンパイラの魔法が作成時にこれらのパラメーターを認識しているように見えます。実際に「 Functionnの 1 つ以上の型パラメーターをバインドしないままにする」ことができる構文は見つかりませんでした。私が好むのは、次のようなものです。
// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7
そのようなものは存在しますか?さらに言えば、展開されるメソッドにジェネリック パラメーターがある場合の eta 展開関数の明示的な型は何ですか?
これは純粋に不自然で役に立たない例です。もちろん、ここで Any を使用する関数を作成することもできます。