19
假設我有這樣的:有沒有辦法控制哪種隱式轉換將成爲默認使用?
class String2(val x:String) {
def *(times:Int) : String = {
val builder = new StringBuilder()
for(i <- 0 until times) {
builder.append(x)
}
builder.toString()
}
}
現在如果我添加此隱:
implicit def gimmeString2(y:String) = new String2(y)
我會得到一個編譯錯誤,因爲stringWrapper還增加了這種隱含。有沒有辦法告訴編譯器「忽略其他含義,使用它」,這樣我就不必實例化一個String2
對象並在其上工作?
我承認示例代碼可能不是最合適的(對於這個問題),但我認爲它會做。
可能重複:http://stackoverflow.com/questions/1339148/avoiding-implicit-def-ambiguity-in-scala – 2009-12-11 09:54:00
我不認爲這是一個副本。這個問題的作者想保留這兩個含義。我只想要一個。 – Geo 2009-12-11 10:56:28
在RichString中有一個與上面已經提供的方法非常相似的方法。如果你想要使用你的方法,也許你可以使用import a.b. {c => _}技巧來隱藏c,其中c是隱式方法名稱。 – 2009-12-11 11:44:17