【发布时间】:2016-01-05 17:57:56
【问题描述】:
昨天我遇到了隐式转换的问题。将其放入导入范围:
object FooConversions {
implicit def toString(foo: Foo): String = foo.toString
}
给了我编译错误。花了一段时间才发现调用函数toString 是罪魁祸首。我没有花太多时间进一步调查,但我的猜测是它与 Object 中的 toString 方法冲突?编译器如何处理这样的隐式转换?
scala> case class Foo(name: String)
defined class Foo
scala> object FooConversions {
| implicit def toString(foo: Foo): String = foo.toString
| }
defined object FooConversions
scala> import FooConversions._
import FooConversions._
scala> val x: String = Foo("bob")
<console>:16: error: type mismatch;
found : Foo
required: String
val x: String = Foo("bob")
【问题讨论】:
-
这个问题有一个很好的答案,关于 scala 在哪里寻找implicits stackoverflow.com/questions/5598085/…
-
你当然可以通过给
FooConversions中的方法取另一个名字来解决这个问题,例如fooToString。
标签: scala