2016-04-27 32 views
5

Ho due trattiCondividi generica tra tratti

trait Base[A] 

trait SometimesUsedWithBase[A] { 
    this: Base[A] => 
} 

Ho quindi utilizzare questi con una classe

class StringThing extends Base[String] with SometimesUsedWithBase[String] 

Sarebbe bello se io non dovessi definire il tipo SometimesUsedWithBase s' e invece in qualche modo capisce che sta usando il tipo definito in Base in modo che assomigli a:

class StringThing extends Base[String] with SometimesUsedWithBase 

È possibile?

risposta

7

Si dovrebbe essere in grado di fare qualcosa di simile.

trait Base[A] { 
    type BaseType = A 
} 

trait SometimesUsedWithBase { 
    this: Base[_] => 
    def someFunction: BaseType 
} 

class StringThing extends Base[String] with SometimesUsedWithBase { 
    def someFunction: String = "" 
} 
+0

Questo funziona perfettamente per me, soprattutto perché sono legati insieme comunque. Grazie! – MintyAnt

+0

Apparentemente se si aggiunge un parametro a someFunction che è di tipo BaseType, si otterranno errori su posizioni Covariant e controvarianti. – MintyAnt