Question

Quelle est la différence entre les Mixins et les traits?

Selon Wikipedia , les modules Ruby sont un peu comme des traits. Comment?

Était-ce utile?

La solution

  1. Mixins peut contenir des traits état, (traditionnel) ne le font pas.
  2. Mixins utiliser "la résolution implicite des conflits", traits utilisent "la résolution explicite des conflits"
  3. Mixins dépend de linéarisation, les traits sont aplaties.

Conférence sur les traits

Annonce 1. Dans mixins vous pouvez définir des variables d'instance. Ne permettent pas les caractéristiques cela. L'état doit être fourni en composant la classe (= classe en utilisant les traits)

Annonce 2. Il peut y avoir 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 mixins les conflits dans la composition C mixins MA, MB de classe sont résolus implicitement.

Class C mixins MA, MB {
    bar():void {
        foo();
    }
}

appellera foo():void de MA

D'autre part en utilisant les traits, la classe de composition a pour résoudre les conflits.

Class C mixins TA, TB {
    bar():void {
        foo();
    }
}

Ce code soulèvera conflit (deux définitions de foo():void).

Annonce 3. La sémantique d'un procédé ne dépend pas de savoir si elle est définie dans un trait ou d'une classe qui utilise le trait.

En d'autres termes, il n'a pas d'importance wheter la classe se compose des caractères ou le code est caractères « copier - coller ». Dans la classe

Autres conseils

Ces pages expliquent la différence dans la D Langage de programmation.

http://dlang.org/mixin.html

http://dlang.org/traits.html

Mixins dans ce contexte sont le code généré à la volée, puis inséré à ce moment-là dans le code lors de la compilation. Très pratique pour les DSLs simples.

caractères sont des valeurs externes de compilation (plutôt que le code généré à partir d'une source externe). La différence est subtile. Mixins ajouter la logique, ajouter des données telles caractères que les informations de type compilation de temps.

Je ne sais pas grand-chose à propos de Ruby, mais espérons que cette aide un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top