Angenommen, ich habe diese:Gibt es eine Möglichkeit zu steuern, welche implizite Konvertierung standardmäßig verwendet wird?
class String2(val x:String) {
def *(times:Int) : String = {
val builder = new StringBuilder()
for(i <- 0 until times) {
builder.append(x)
}
builder.toString()
}
}
jetzt, wenn ich diese implizite hinzu:
implicit def gimmeString2(y:String) = new String2(y)
Ich werde einen Kompilierungsfehler, weil stringWrapper fügt auch diese implizit. Gibt es eine Möglichkeit, dem Compiler zu sagen: "Ignoriere andere implitits, benutze das", damit ich kein String2
Objekt instanziieren und daran arbeiten muss?
Ich gebe zu, der Beispielcode möglicherweise nicht am besten geeignet (für diese Frage), aber ich denke, es wird tun.
Mögliche doppelte: http://stackoverflow.com/questions/1339148/avoiding-implicit-def-ambiguity-in-scala –
Ich glaube nicht, dass es ein Duplikat. Der Autor dieser Frage wollte beide implicits behalten. Ich will nur eins. – Geo
Es gibt eine sehr ähnliche, wenn nicht identische Methode zu den oben bereits in RichString. Wenn Sie möchten, dass Ihre Methode verwendet wird, können Sie möglicherweise die Methode import a.b. {c => _} verwenden, um c zu verbergen, wobei c der Name der impliziten Methode ist. –