1
class A
class B
class Something {
def method(arg: A) = ???
def method(arg: B) = ???
}
class C
object C {
implicit def ctoa(c: C): A = ???
implicit def ctob(c: C): B = ???
}
此外:
- 類
A
,B
和Something
及其同伴不能被修改 - 必須有一個隱式轉換從
C
到A
和從C
到B
,它們的優先順序並不重要 - 其他重要的是,類
C
和它的同伴可以隨意修改 - 當然,更多類型,implicits等可以添加
現在,有沒有辦法讓這個編譯:
(new Something).method(new C)
?
有一種方法在不確定性的情況下,控制隱式轉換的優先級(例如,通過將低優先級implicits成超/性狀),但我不知道爲什麼它不會在這種情況下工作。 – ghik
你的超類/特質事物的來源是什麼? Daniel Sobral寫了一篇關於隱含優先級的文章。 http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits C.ctoa和C.ctob在同一個編譯單元,所以我覺得由丹尼爾·唐描述的優先羣體發揮作用。 –
http://stackoverflow.com/questions/1886953/is-there-a-way-to-control-which-implicit-conversion-will-be-the-default-used – ghik