Миксины и трейты



в чем разница между миксинами и чертами характера?

согласно Википедии, Ruby модули вроде как черты. Как же так?

266   2  

2 ответов:

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

лекция О черт

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

ad 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

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

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

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

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

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

http://dlang.org/mixin.html

http://dlang.org/traits.html

Mixins в этом контексте код генерируется на лету, а затем вставляется в этот момент в коде во время компиляции. Довольно удобно для простых DSLs.

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.