Estive lendo um livro sobre Scala e não há menção de modificações empilháveis usando traços . Quais são as modificações empilháveis e para que fins se destinam a ser usados?
Quais são as modificações empilháveis?
Olhei para apresentação do mundo real Scala onde o termo modificações empilháveis também é usado. Aparentemente é características que chamam o método de super ao substituir, essencialmente, adicionando funcionalidade e não substituí-lo. Então você acumular funcionalidade com características, e pode ser usado onde em Java muitas vezes usamos aspectos. Trait desempenha o papel de um aspecto, substituindo os métodos "interessantes" e adicionando a funcionalidade específica, como login, etc e, em seguida, chamando super e "passar a bola" para o próximo traço na cadeia. HTH.
A qualidade fundamental que distingue modificações empilháveis (como a terminologia é usada em scala de qualquer maneira) é que "super" é influenciada dinamicamente com base em como o traço é misturado, enquanto que em super-geral é um alvo determinado estaticamente.
Se você escrever
abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }
em seguida, para Foo "super" será sempre Bar.
Se você escrever
trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }
Então, para que o super método permanece desconhecida até que a classe é feita.
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
Por isso é interessante? Um exemplo ilustrativo pode ser alguns dados que você deseja compactar, criptografar e assinar digitalmente. Você pode querer comprimir em seguida, criptografar, em seguida, assinar, ou você pode querer criptografar em seguida, assinar, em seguida, comprimir, etc. Se você projetar seus componentes, desta forma, você pode instanciar um objeto personalizado com exatamente os bits que você quer organizado da maneira que quiser.













