Scala, Étendre l'objet avec un trait générique
Je suis en utilisant Scala et je tiens à exprimer (singleton) de l'objet avec un trait de caractère, qui offre une structure de données et de certaines méthodes, comme ceci:
trait Tray[T] {
val tray = ListBuffer.empty[T]
def add[T] (t: T) = tray += t
def get[T]: List[T] = tray.toList
}
Et puis je vous tiens au mixage de la trait sur un objet, comme ceci:
object Test with Tray[Int]
Mais il y a des différences de type de add
et get
:
Test.add(1)
//...
Comment je vais obtenir que cela fonctionne? Ou quel est mon erreur?
OriginalL'auteur Themerius | 2012-12-24
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes de l'ombre à la caractéristique du type de paramètre avec la
T
sur leadd
etget
méthodes. Voir ma réponse ici pour plus de détails sur le problème.Voici le bon code:
Notez l'utilisation de
extends
dans la définition de l'objet—voir la section 5.4 de le spec pour une explication de pourquoiwith
seul ne fonctionne pas ici.Je ne suis pas sûr de comprendre exactement ce que tu veux dire, mais le problème est en fait assez simple—vous pouvez introduire un nouveau nom de type, dans une méthode de type du paramètre de la liste qui est orthographié les mêmes que dans un type existant nom en dehors de la méthode. Vous pouvez faire exactement la même chose en Java.
Bien sûr, c'est une chose étendue. Par conséquent, il est plus d'une fonction. 🙂
OriginalL'auteur Travis Brown