W różnych literaturach Scala widzę adnotacje typu własnego używające „tego”, a inne używające „siebie”:
trait A { this: B => ... }
trait A { self: B => ... }
Czy jest jakaś prawdziwa różnica między używaniem „tego” a „ja”? Czy w ogóle ma znaczenie, jakiego imienia użyjesz? Czy to jest tak samo ważne?
trait A { foo: B => ... }
trait A { self: B, C => ... }
?with
słowa kluczowego w adnotacji do samodzielnego wpisywania. Na przykładtrait A { self: B with C => ... }
_: B =>
na razie nie alias dla uproszczeniaJest różnica w tym, że
this
zawsze odnosi się do obiektu zdefiniowanego przez najbardziej wewnętrzny szablon.Tak więc, jeśli nazwiesz swój typ siebie
foo
, nadal możesz nazywać go jakothis
(chyba że, oczywiście, jesteś w szablonie wewnętrznym, w którym to przypadkuthis
będziesz odnosić się do zdefiniowanego przez niego obiektu - i chyba że nie podasz wewnętrznego template samodzielnie wpisuje tę samą nazwę), ale oczywiście nie na odwrót.źródło