Quelle est la différence entre les mixins et les traits?
Selon Wikipedia , les modules Ruby sont en quelque sorte des traits similaires. Comment?
la source
Quelle est la différence entre les mixins et les traits?
Selon Wikipedia , les modules Ruby sont en quelque sorte des traits similaires. Comment?
ad 1. Dans mixins, vous pouvez définir des variables d'instance. Les traits ne permettent pas cela. L'état doit être fourni en composant la classe (= classe utilisant les traits)
ad 2.
Il peut y avoir un conflit de nom. Deux mixins ( MA
et MB
) ou traits ( TA
et TB
) définissent la méthode avec la même définition foo():void
.
Mixin MA {
foo():void {
print 'hello'
}
}
Mixin MB {
foo():void {
print 'bye'
}
}
Trait TA {
foo():void {
print 'hello'
}
}
Trait TB {
foo():void {
print 'bye'
}
}
Dans les mixins, les conflits dans la classe de composition C mixins MA, MB
sont résolus implicitement.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Cela appellera foo():void
deMA
D'autre part, lors de l'utilisation de Traits, la classe de composition doit résoudre les conflits.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Ce code soulèvera des conflits (deux définitions de foo():void
).
ad 3. La sémantique d'une méthode ne dépend pas du fait qu'elle soit définie dans un trait ou dans une classe qui utilise le trait.
En d 'autres termes, peu importe si la classe se compose des Traits ou si le code des Traits est "copié - collé" dans la classe.
Ces pages expliquent la différence dans le langage de programmation D.
http://dlang.org/mixin.html
http://dlang.org/traits.html
Les mixins dans ce contexte sont du code généré à la volée, puis insérés à ce stade dans le code lors de la compilation. Très pratique pour les DSL simples.
Les traits sont des valeurs externes au moment de la compilation (plutôt que du code généré à partir d'une source externe). La différence est subtile. Les mixins ajoutent de la logique, les traits ajoutent des données telles que des informations de type à la compilation.
Je ne sais pas grand-chose sur Ruby, mais j'espère que cela vous aidera un peu.
la source