Quais são as modificações empilháveis?

votos
8

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?

Publicado 12/05/2009 em 11:18
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

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.

Respondeu 12/05/2009 em 22:25
fonte usuário

votos
8

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.

Respondeu 14/05/2009 em 22:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more