Миксины против черт

В чем разница между Mixins и чертами?

Согласно Википедии , Ruby Modules – вроде как черты. Как так?

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

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

ad 1. В mixins вы можете определить переменные экземпляра. Черты этого не позволяют. Состояние должно быть обеспечено составом classа (= class с использованием признаков)

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 конфликты в составлении classа C mixins MA, MB разрешаются неявно.

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

Это вызовет foo():void from MA

С другой стороны, при использовании Черт, составной class должен разрешать конфликты.

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

Этот код вызовет конфликт (два определения foo():void ).

3. Семантика метода не зависит от того, определена ли она в признаке или в classе, который использует этот признак.

Другими словами, не имеет значения, что class состоит из кода «Черты» или «Черты», который «скопирован – вставлен» в class.

На этих страницах объясняется различие в языке программирования D.

http://dlang.org/mixin.html

http://dlang.org/traits.html

Микшины в этом контексте являются кодом, сгенерированным «на лету», а затем вставляются в эту точку кода во время компиляции. Достаточно удобно для простых DSL.

Черты являются внешними значениями времени компиляции (а не кодом, генерируемым из внешнего источника). Разница тонкая. Mixins добавляет логику, черты добавляют данные, такие как информация типа времени компиляции.

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

  • Недвижимость против ivar во времена ARC
  • Обновление значения свойства в файле свойств без удаления других значений
  • Как перебрать все свойства classа?
  • Можно ли установить частную собственность через reflection?
  • Почему нам нужны свойства в C #
  • Поднять событие всякий раз, когда значение свойства изменилось?
  • Как заполнить HashMap из файла свойств java с помощью Spring @Value
  • Получить список свойств объекта в Objective-C
  • Использование @property против геттеров и сеттеров
  • Проверка значения null перед ToString ()
  • Объект C - свойство Synthesize
  • Interesting Posts

    Подключение сетей для двух зданий

    Grep и Sed Equivalent для обработки командной строки XML

    Почему мышь всегда перемещается в левый нижний угол?

    ValueError: ошибка при проверке цели: ожидаемая модель_2 должна иметь форму (None, 252, 252, 1), но получен массив с формой (300, 128, 128, 3)

    Как справиться с категориальными особенностями с помощью spark-ml?

    Android Studio: дубликаты файлов, скопированных в APK META-INF / DEPENDENCIES при компиляции

    Как увеличить размер текущего сфокусированного объекта на RecyclerView?

    Отменить в начале складки

    Как найти неиспользуемый / мертвый код в java-проектах

    Конструктор c ++ имеет конструктор по умолчанию?

    Сертификат клиента SSL в Maven

    Как получить содержимое веб-страницы из WebView?

    Передача строки в параметре фильтра Get-ADUser вызывает ошибку – свойство не найдено в pscustomobject

    Каково возможное использование для параметра #define для if (false) {} else for??

    PID: 4 с использованием порта 80

    Давайте будем гением компьютера.