Date le seguenti caratteristiche:.Utilizzando v Non uso di `self` Tipo
scala> trait Foo { self =>
| def f: String = self.getClass.getName
| }
defined trait Foo
scala> trait Bar {
| def f: String = this.getClass.getName
| }
defined trait Bar
E poi facendo classi che estendono loro:
scala> class FooImpl extends Foo {}
defined class FooImpl
scala> class BarImpl extends Bar {}
defined class BarImpl
e quindi chiamando i loro f
metodi su nuove istanze:
scala> (new FooImpl).f
res1: String = FooImpl
scala> (new BarImpl).f
res4: String = BarImpl
Il REPL mostra che stampano gli stessi valori - il nome della classe.
Forse questo non è un buon esempio. Ma qual è la differenza tra l'utilizzo di nello Foo
sopra rispetto a Bar
, che utilizza this
?