Supposons que j'ai ceci:Existe-t-il un moyen de contrôler quelle conversion implicite sera utilisée par défaut?
class String2(val x:String) {
def *(times:Int) : String = {
val builder = new StringBuilder()
for(i <- 0 until times) {
builder.append(x)
}
builder.toString()
}
}
maintenant si j'ajoute cette implicite:
implicit def gimmeString2(y:String) = new String2(y)
je vais obtenir une erreur de compilation parce stringWrapper ajoute cette implicite. Existe-t-il un moyen de dire au compilateur "ignorer les autres implicits, utilisez ceci", de sorte que je n'ai pas besoin d'instancier un objet String2
et de travailler dessus?
j'avoue l'exemple de code ne peut pas être le plus approprié (pour cette question), mais je pense qu'il va faire.
double possible: http://stackoverflow.com/questions/1339148/avoiding-implicit-def-ambiguity-in-scala –
Je ne pense pas qu'il soit un doublon. L'auteur de cette question voulait garder les deux implicites. Je n'en veux qu'un. – Geo
Il existe une méthode très similaire, sinon identique à celle ci-dessus déjà disponible dans RichString. Si vous voulez que votre méthode soit utilisée, vous pouvez peut-être utiliser la technique d'importation a.b. {c => _} pour masquer c où c est le nom implicite de la méthode. –