- Миксины могут содержать состояние, а (традиционные) - нет.
- Миксины используют «неявное разрешение конфликтов», черты используют «явное разрешение конфликтов»
- Mixins зависит от линеаризации, черты уплощены.
Лекция о чертах характера
объявление 1.
В mixins вы можете определить переменные экземпляра. Черты не позволяют этого. Состояние должно быть обеспечено путем составления класса (= класс с использованием признаков)
объявление 2.
Может быть конфликт имен. Два миксина (MA
и MB
) или признаки (TA
и TB
) определяют метод с одинаковым определением 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'
}
}
В миксинах конфликты при создании класса C mixins MA, MB
разрешаются неявно.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Это будет звонить foo():void
с MA
С другой стороны, при использовании черт составление классов должно разрешать конфликты.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Этот код вызовет конфликт (два определения foo():void
).
объявление 3.
Семантика метода не зависит от того, определен ли он в признаке или в классе, который использует признак.
Другими словами, не имеет значения, где класс состоит из черт или код черт «скопирован» в класс.