18

假设我有这个:

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

不要介意函数的作用。有没有让它通用,所以我可以有一个 Option[T]?

4

2 回答 2

9

从该答案中总结:不,您不能将匿名函数设为通用,但您可以将函数显式定义为扩展 Function0、Function1、Function2 等特征之一的类,并根据这些特征定义应用函数. 那么你定义的类可以是通用的。这是原始文章的摘录,可在此处获得:

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
于 2010-04-02T14:21:06.597 回答
7

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

于 2010-03-31T16:36:22.570 回答