Generics 如何定义匿名泛型Scala函数?

Generics 如何定义匿名泛型Scala函数?,generics,scala,anonymous-function,Generics,Scala,Anonymous Function,假设我有这个: val myAnon:(Option[String],String)=>String = (a:Option[String],defVal:String) => { a.getOrElse(defVal) } 不介意函数做什么。有没有办法使它通用,这样我就可以有一个选项[T]?我不认为匿名函数可以有类型参数。有关详细信息,请参见。从该答案中总结:不,不能将匿名函数设为泛型函数,但可以将函数显式定义为扩展函数0、函数1、函数2等之一的类。。traits并根据这些t

假设我有这个:

val myAnon:(Option[String],String)=>String = (a:Option[String],defVal:String) => {
  a.getOrElse(defVal)
}

不介意函数做什么。有没有办法使它通用,这样我就可以有一个选项[T]?

我不认为匿名函数可以有类型参数。有关详细信息,请参见。

从该答案中总结:不,不能将匿名函数设为泛型函数,但可以将函数显式定义为扩展函数0、函数1、函数2等之一的类。。traits并根据这些traits定义apply函数。然后您定义的类可以是泛型的。以下是原始文章的摘录,可供查阅:

scala>class myfunc[T]扩展了Function1[T,String]{
|def apply(x:T)=x.toString.子字符串(0,4)
| }
定义类myfunc
scala>val f5=新的myfunc[字符串]
f5:myfunc[字符串]=
scala>f5(“abcdefg”)
res13:java.lang.String=abcd
scala>val f6=新的myfunc[Int]
f6:myfunc[Int]=
scala>f6(1234567)
res14:java.lang.String=1234

还可以更习惯地编写它,因为
扩展了(T=>String){
scala> class myfunc[T] extends Function1[T,String] {
     |     def apply(x:T) = x.toString.substring(0,4)
     | }
defined class myfunc

scala> val f5 = new myfunc[String]
f5: myfunc[String] = <function>

scala> f5("abcdefg")
res13: java.lang.String = abcd

scala> val f6 = new myfunc[Int]
f6: myfunc[Int] = <function>

scala> f6(1234567)
res14: java.lang.String = 1234