假设代码:
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
及其伴侣可以自由修改现在,有没有办法进行编译:
(new Something).method(new C)
答案 0 :(得分:2)
我知道这不是你想要的,但我没有看到任何办法,除了将其中一个隐含在另一个范围内。
class A
class B
class Something {
def method(arg: A) = println("method(A)")
def method(arg: B) = println("method(B)")
}
class C
object C {
implicit def ctoa(c: C): A = new A
}
object X {
implicit def ctob(c: C): B = new B
}
然后你得到:
scala> (new Something).method(new C)
method(A)
否则,您试图违反非歧义规则:“只有在没有其他可能的插入转换时才会插入隐式转换。”见Programming in Scala。