J'ai essayé de créer un alias de type lié au type dépendant _ >: a.type
.Pourquoi le compilateur Scala interdit-il la déclaration d'un type générique comme super-type d'un paramètre de type
Le compilateur Scala signale une erreur que je ne comprenais pas:
scala> def foo[A](a: A) = {
| type F = Function1[_ >: a.type, Unit]
| }
<console>:12: error: type mismatch;
found : a.type (with underlying type A)
required: AnyRef
Note that A is unbounded, which means AnyRef is not a known parent.
Such types can participate in value classes, but instances
cannot appear in singleton types or in reference comparisons.
type F = Function1[_ >: a.type, Unit]
^
Si je remplace a: A
à a: A with AnyRef
, cela fonctionne:
scala> def foo[A](a: A with AnyRef) = {
| type F = Function1[_ >: a.type, Unit]
| }
foo: [A](a: A with AnyRef)Unit
Pourquoi? Quel est le but de la restriction?
Je ne comprends toujours pas pourquoi cela affecte _>: a.type. Je pensais à un type existentiel comme _>: a.type ne serait jamais impliqué dans le contrôle d'égalité de types. –
Je suppose que le contexte n'est pas pris en compte lorsque la sauvegarde est appliquée; espérons que l'un des gourous de la langue Scala clarifiera. – devkat