Я читал книгу о Скале и упоминал о штабелируемых модификациях с использованием черт. Что такое сменные версии и для каких целей они предназначены для использования?Что такое штабелируемые модификации?
ответ
Основополагающее качество, которое отличает стекируемые модификации (поскольку терминология используется в scala в любом случае), заключается в том, что на «супер» влияют динамически, основываясь на том, как этот признак смешивается, в то время как в целом супер является статически определяемой целью.
Если вы пишете
abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }
то для Foo "супер" всегда будет бар.
Если вы пишете
trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }
Тогда для этого метода супер остается неизвестным до тех пор, пока класс сделан.
trait Foo2 extends Foo { abstract override def bar(x: Int) = x * super.bar(x) }
scala> (new Foo with Foo2 with Foo1).bar(5)
res0: Int = 30
scala> (new Foo with Foo1 with Foo2).bar(5)
res1: Int = 50
Почему это интересно? Иллюстративным примером могут быть некоторые данные, которые вы хотите сжать, зашифровать и подписать цифрами. Возможно, вам захочется сжать, затем зашифровать, а затем подписать, или вы можете зашифровать, затем сжать и сжать, и т. Д. Если вы создадите свои компоненты таким образом, вы можете создать экземпляр настраиваемого объекта точно с теми битами, которые вы хотите организовать так, как хотите.
Просто ради элегантности «черта Foo1 расширяет бар» вместо «черты Foo1 extends Foo»? –
Борис - ты абсолютно прав, он написан только так, потому что я добавил Бар в последнюю минуту. – extempore
Я рассмотрел Real-World Scala presentation, где также используется термин стекируемых модификаций. По-видимому, это черты, которые называют супер-метод при переопределении, существенно добавляя функциональность и не заменяя ее. Таким образом, вы накапливаете функциональность с чертами, и ее можно использовать там, где в Java мы часто используем аспекты. Черта играет роль аспекта, переопределяя «интересные» методы и добавляя конкретные функции, такие как ведение журнала и т. Д., А затем вызов супер и «передача мяча» в следующий признак в цепочке. НТН.
Какой замечательный набор слайдов он получил! – egaga
Книга объясняет это в главе о признаках. – Rayne