J'ai vu "<:" et ">:" et "<%" etc., quelqu'un peut-il donner (ou localiser) une bonne description de ceux-ci? Quelles sont les contraintes possibles, que font-ils, et quel est un exemple de quand les utiliser?
Réponses
Trop de publicités?S <: T
signifie qu' S
est un sous-type d' T
. Il est également appelé un supérieur de type lié. De même, S >: T
signifie qu' S
est un supertype de T
, un type inférieur lié.
S <% T
est un point de vue lié, et exprime S
doit venir équipé avec une vue que les cartes de ses valeurs, des valeurs de type T
.
C'est déroutant pour moi aussi, et j'ai une Maîtrise de langages de programmation de Berkeley.
Il existe deux types de bêtes ici, mais ils sont tous savent que "limites" et pas des "contraintes"...
Les premières sont le type de limites:
-
<:
- uppper type lié -
>:
- type inférieur lié
Ces sont essentiellement les mêmes que super
et extends
en java, et sera effectivement codé en tant que tel dans le bytecode généré, ce qui est bon pour l'interopérabilité :)
Vient ensuite le sucre syntaxique:
-
<%
- vue lié -
:
- contexte lié
Ce ne sont PAS encodés de façon que Java pourrait éventuellement comprendre (bien qu'ils soient représentés dans la scala de signature, une annotation que la scala ajoute à toutes les classes pour aider le compilateur, et qui est finalement la base d'un Scala de réflexion de la bibliothèque)
Ces deux sont des convertis de paramètres implicites:
def fn[A <% B](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev = A => B) = ... //unsugared
def fn[A : Numeric](arg: A) = ... //sugared
def fn[A](arg: A)(implicit ev = Numeric[A]) = ... //unsugared
Pour cette raison, vous ne pouvez pas combiner vos propres implicites, soit avec vue sur les limites ou le contexte limites, comme Scala permet uniquement à un bloc de étiqueté comme implicite pour toute fonction ou d'un constructeur.
Si vous avez besoin d'utiliser votre propre implicites, alors vous devez d'abord convertir manuellement ces limites à la version sans sucre et les ajouter à l'implicite bloc.
Voir la Scala de programmation de O'Reilly . Commencez aux limites de type . Je pense que cela explique très bien les limites de type et de vue.
En ce qui concerne l'explication des limites de la vue et du contexte, jetez un coup d'œil à cette réponse d'une richesse caractéristique fournie par Daniel à la question suivante: