Вопрос

В чем разница между миксинами и Признаками?

Согласно Википедии, Модули Ruby - это что-то вроде черт характера.Как же так?

Это было полезно?

Решение

  1. Миксины могут содержать государственные черты, а (традиционные) - нет.
  2. Миксины используют "неявное разрешение конфликтов", черты характера используют "явное разрешение конфликтов".
  3. Миксины зависят от линеаризации, черты сглажены.

Лекция о чертах характера

объявление 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'
    }
}

В миксинах конфликты в классе composing 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. Семантика метода не зависит от того, определен ли он в чертеже или в классе, который использует этот признак.

Другими словами, не имеет значения, состоит ли класс из признаков или код признаков "скопирован" в класс.

Другие советы

Эти страницы объясняют разницу в языке программирования D.

http://dlang.org/mixin.html

http://dlang.org/traits.html

Миксины в этом контексте - это код, генерируемый "на лету", а затем вставляемый в этот момент в код во время компиляции.Довольно удобно для простых DSL.

Признаки - это внешние значения во время компиляции (а не код, сгенерированный из внешнего источника).Разница очень тонкая.Микшины добавляют логику, черты характера добавляют данные, такие как информация о типе во время компиляции.

Я мало что знаю о Ruby, но надеюсь, что это хоть немного поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top