如何定义匿名通用Scala函数?

Geo*_*Geo 15 generics scala anonymous-function

假设我有这个:

val myAnon:(Option[String],String)=>String = (a:Option[String],defVal:String) => {
  a.getOrElse(defVal)
}
Run Code Online (Sandbox Code Playgroud)

不要介意这个功能.有没有把它变成通用的,所以我可以有一个选项[T]?

Jer*_*ell 8

总结一下这个答案:不,你不能使匿名函数变得通用,但你可以明确地将你的函数定义为扩展Function0,Function1,Function2等特征之一的类,并从这些特征中定义apply函数. .然后,您定义的类可以是通用的.以下是原始文章的摘录,可在此处获得:

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
Run Code Online (Sandbox Code Playgroud)

  • 也可以更加惯用地写成`extends(T => String){` (2认同)

Ben*_*ngs 7

我不认为匿名函数可以有类型参数.有关详情,请参阅此答案.