La différence entre cela et l'auto dans auto-annotations de type?
Dans divers Scala de la littérature, je vois certains auto-annotations de type à l'aide de "ce" et les autres en utilisant le "soi":
trait A { this: B => ... }
trait A { self: B => ... }
Est-il une réelle différence entre l'utilisation de "ceci" ou "auto"? N'importe quel nom que vous utilisez? Est-ce aussi valable?
trait A { foo: B => ... }
Vous devez vous connecter pour publier un commentaire.
Tous les trois formes sont valides et ont pour effet que
B
est considéré comme le type dethis
dans la classeA
.Les deux premières variantes
introduire
self
(respectivement,foo
) comme un alias pourthis
traitA
. Ceci est utile pour accéder à lathis
de référence à partir de l'intérieur de la classe. I. e. vous pouvez ensuite utiliserself
au lieu deA.this
lors de l'accès à lathis
de référence de la traitA
à partir d'une classe imbriquée à l'intérieur d'elle. Exemple:La troisième variante,
ne pas introduire un alias pour
this
; simplement, il définit l'auto type.trait A { self: B, C => ... }
?with
mot-clé dans l'auto-typage d'annotation. Par exempletrait A { self: B with C => ... }
_: B =>
pour les non-alias cas pour des raisons de simplicitéIl y a une différence dans ce
this
toujours fait référence à l'objet défini par les recoins les plus profonds de modèle.Donc, si vous appelez votre auto-type
foo
, vous pouvez toujours vous y référer en tant quethis
(à moins, bien sûr, vous êtes dans un modèle interne, auquel casthis
fera référence à l'objet défini par elle – et à moins que vous ne donnez pas à l'intérieur du modèle d'auto-tapez le même nom) mais, évidemment, pas l'inverse.