2010-03-31 74 views
14

比方说,我有这样的:我如何定义一个匿名通用斯卡拉功能?

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

不介意的功能是什么。反正使其通用的,这样我就可以有一个选项[T]?

回答

7

我不认为匿名函数可以有类型参数。见this answer了解详情。

7

从这个答案总结:不,你不能使匿名函数泛型,但你可以显式定义你的函数作为一个类,扩展Function0,Function1,Function2等等之一。特征和定义来自这些特征的应用功能。然后,您定义的类可以是通用的。下面是从原来的文章的摘录,可用here

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 
+2

也可以编写它更地道为'延伸(T =>字符串){' – 2013-06-28 20:27:14