Jus*_*s12 6 scala implicit scala-2.11
假设我有代码:
class A(implicit s:String = "foo"){println(s)}
object X {
implicit val s1 = "hello"
}
object Y {
import X._
// do something with X
implicit val s2 = "hi"
val a = new A
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
<console>:14: error: ambiguous implicit values:
both value s2 in object Y of type => String
and value s1 in object X of type => String
match expected type String
val a = new A
Run Code Online (Sandbox Code Playgroud)
有什么办法,我可以告诉斯卡拉利用价值s2的Y?(如果我重新命名s2到s1,它工作正常,但是这不是我想要的).
另一个解决方案是不要做import X._,我想要避免的事情.
我同意另一个答案,明确提供隐含在这些类型的情况下是首选,但如果你坚持想要"降级"另一个隐含的,那么它不再被视为隐含的那么它实际上是可能的:
class A(implicit s:String = "foo"){println(s)}
object X {
implicit val s1 = "hello"
}
object Y {
import X._
val s1 = X.s1 //downgrade to non-implicit
// do something with X
implicit val s2 = "hi"
val a = new A
}
Run Code Online (Sandbox Code Playgroud)
再次,这有点hackish,但它的工作原理.