2015-03-31 1 views
5

Je comprends que je peux définir duck typing dans generics comme suitdans scala définir un type générique basé sur le typage du canard?

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

Cependant, je ne veux pas de préciser que tout grand string dans ma trait définition.

Comment puis-je partager ce à deux (ce que je souhaite que je pourrais avoir):

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

trait MyTrait[A] 

Répondre

9

Vous pouvez faire:

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

En fait, certains guides de style Scala recommandent cette répartition lorsque le type structurel aurait plus de 50 caractères. :

Les types de structure doivent être déclarés sur une seule ligne s'ils ont moins de 50 caractères. Dans le cas contraire, ils doivent être répartis sur plusieurs lignes et (généralement) affectés à leur propre alias de type

Vous ne pouvez pas affecter le type lié A <: B lui-même à un alias de type, car il est pas un type, mais une contrainte sur la paramètre générique de MyTrait. Vous pouvez en savoir plus sur les limites de type here.