В чем разница между Mixins и чертами?
Согласно Wikipedia, Ruby Modules - это вроде как черты. Как это так?
В чем разница между Mixins и чертами?
Согласно Wikipedia, Ruby Modules - это вроде как черты. Как это так?
объявление 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. Семантика метода не зависит от того, определена ли она в признаке или в классе, который использует этот признак.
Другими словами, не имеет значения, что класс состоит из черт или кода "Черты", который "скопирован - вставлен" в класс.
Эти страницы объясняют разницу в языке программирования D.
В этом контексте миксины - это код, создаваемый "на лету", а затем вставляемый в эту точку кода во время компиляции. Достаточно удобно для простых DSL.
Черты - это внешние значения времени компиляции (а не код, созданный из внешнего источника). Разница тонкая. Mixins добавляют логику, черты добавляют данные, такие как информация типа времени компиляции.
Не знаю много о Ruby, но надеюсь, что это немного помогает.