J'essaie d'ajouter implicitement des fonctions à la classe Symbol
via deux niveaux d'implicits (comme décrit here). Considérez le code suivant:Ombre any2stringadd lors de la conversion implicite du symbole
case class A(s: Symbol)
case class B(s: A) {
def +[X](s: X)(implicit xtoa: X=>A) = B(xtoa(s))
}
implicit def xToB[X](s: X)(implicit xtoa: X => A) = B(xtoa(s))
implicit def symbolToA(s: Symbol) = A(s)
val x = 'a + 'b
Ce programme ne compile pas:
Error: value + is not a member of Symbol
Il semble que le problème est qu'au lieu de choisir les implicits définis dans le snipped, scala convertit 'a
avec la fonction any2stringadd
. En fait, les deux expériences semblent faire la compilation de code suivant:
- je peux utiliser un nom de fonction différente au lieu de
+
(commeadd
par exemple) - J'ombre explicitement
any2stringadd
dans les importations:import Predef.{any2stringadd => _ , _}
Je n'aime pas les solutions. Ma question est, y at-il un autre moyen de reformuler mon programme pour convaincre scala de choisir mes implicits à la place?
NB: J'utilise scala 2.12.1. Fait intéressant, IntelliJ ne se plaint pas de cet extrait.