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