Giả sử tôi có điều này:Có cách nào để kiểm soát chuyển đổi ngầm định nào sẽ được sử dụng mặc định?
class String2(val x:String) {
def *(times:Int) : String = {
val builder = new StringBuilder()
for(i <- 0 until times) {
builder.append(x)
}
builder.toString()
}
}
bây giờ nếu tôi thêm ngầm này:
implicit def gimmeString2(y:String) = new String2(y)
tôi sẽ nhận được một lỗi biên dịch vì stringWrapper cũng cho biết thêm tiềm ẩn này. Có cách nào để nói với trình biên dịch "bỏ qua implicits khác, sử dụng này", để tôi không phải nhanh chóng một đối tượng String2
và làm việc trên đó?
Tôi thừa nhận mã ví dụ có thể không phù hợp nhất (đối với câu hỏi này), nhưng tôi nghĩ nó sẽ làm.
có thể trùng lặp: http://stackoverflow.com/questions/1339148/avoiding-implicit-def-ambiguity-in-scala –
Tôi không nghĩ rằng đó là một bản sao. Tác giả của câu hỏi đó muốn giữ lại cả hai điều này. Tôi chỉ muốn một. – Geo
Có một phương pháp rất giống nhau, nếu không giống hệt nhau, ở trên đã có sẵn trong RichString. Nếu bạn muốn phương thức của bạn được sử dụng, có lẽ bạn có thể sử dụng kỹ thuật import a.b. {c => _} để ẩn c trong đó c là tên phương thức ngầm. –