2015-03-31 16 views
5

capisco posso definire digitazione anatra in generics come seguein scala definisci un tipo generico basato sulla digitazione anatra?

trait MyTrait[A <: {def someMethod(key: String): String}] 

Comunque io non voglio precisare che tutta la grande string nel mio trait definizione.

Come posso dividere questo per due (quello che vorrei poter avere):

type A = B <: {def someMethod(key: String): String} 

trait MyTrait[A] 

risposta

9

si può fare:

type B = { def someMethod(key: String): String } 
trait MyTrait[A <: B] 

In realtà, alcune guide di stile Scala consiglia questa ripartizione quando il tipo strutturale avrebbe più di 50 caratteri. Here's one from the Scala docs:

I tipi strutturali devono essere dichiarati su una riga singola se hanno una lunghezza inferiore a 50 caratteri. In caso contrario, essi dovrebbero essere divisi su più linee e (solitamente) assegnati al proprio tipo alias

Non si può assegnare il tipo legato A <: B stesso per un tipo di alias, dal momento che non è un tipo, ma un vincolo sulla parametro generico di MyTrait. Puoi leggere ulteriori informazioni sui limiti di tipo here.

Problemi correlati