2010-03-31 13 views
14

Diciamo che ho questo:Come definire una funzione Scala generica anonima?

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

non vi importa ciò che la funzione fa. C'è comunque di renderlo generico, quindi posso avere un'opzione [T]?

risposta

7

Non penso che le funzioni anonime possano avere parametri di tipo. Vedi this answer per i dettagli.

7

Per riassumere da tale risposta: No, non è possibile rendere generiche le funzioni anonime anonime, ma è possibile definire esplicitamente la funzione come una classe che estende uno dei tratti Funzione0, Funzione1, Funzione2, ecc. E definire la funzione di applicare da quei tratti. Quindi la classe che definisci può essere generica. Ecco l'estratto dell'articolo originale, disponibile 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

può anche scrivere più idiomaticamente come 'estende (T => String) {' –

Problemi correlati