141 votes

Différence entre ceci et soi dans les annotations de type auto?

Dans diverses publications Scala, je vois des annotations de type auto utilisant "this" et d'autres utilisant "self":

 trait A { this: B => ... }
trait A { self: B => ... }
 

Existe-t-il une réelle différence entre "ceci" et "soi"? Le nom que vous utilisez importe-t-il? Est-ce aussi valable?

 trait A { foo: B => ... }
 

184voto

Martin Odersky Points 13161

Les trois formes sont valides et ont l'effet qu' B est considéré comme le type d' this dans la classe A. Les variantes

trait A { self: B => ... }
trait A { foo: B => ... }

introduire self (respectivement, foo) comme un alias pour this en trait A. Ceci est utile pour accéder à l' this de référence à partir de l'intérieur de la classe. I. e. vous pouvez ensuite utiliser self au lieu de A.this lors de l'accès à l' this référence du trait, A d'une classe imbriquée à l'intérieur. La troisième variante,

trait A { this: B => ... }

ne pas introduire un alias pour this; simplement, il définit l'auto type.

17voto

Debilski Points 28586

Il y a une différence dans cette this toujours fait référence à l'objet défini par les recoins les plus profonds de modèle.

L'expression this peut apparaître dans la déclaration d'un modèle ou d'un composé de type. C'est l'objet étant défini par le plus profond de modèle ou d'un composé de type entourant la référence. Si c'est un composé de type, le type d' this est composé de type. Si il est un modèle de la classe ou de la définition de l'objet avec le simple nom de C, le type de ce est le même que le type de C.this. (Scala Réf. §6.5)

Donc, si vous appelez votre auto-type foo, vous pouvez toujours vous y référer en tant que this (à moins, bien sûr, vous êtes dans un modèle interne, auquel cas this va se référer à 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X