作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试重载对象 World 中的方法使用隐式
类(class)世界
class World {
}
object World {
implicit class WithWorld(_world: World) {
def world(): Unit = println("world")
}
implicit class WithWorld2(_world: World) {
def world(i: List[Int]): Unit = println("list Int")
}
implicit class WithWorld3(_world: World) {
def world(i: List[String]): Unit = println("list String")
}
}
val world = new World()
world.world(List(1))
world.world(List("string"))
world.world()
,我得到一个编译错误
Error:(36, 5) type mismatch;
found : world.type (with underlying type World)
required: ?{def world: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method WithWorld in object World of type (_world: World)World.WithWorld
and method WithWorld2 in object World of type (_world: World)World.WithWorld2
are possible conversion functions from world.type to ?{def world: ?}
world.world()
^
最佳答案
看起来像一个错误,但很难说。通常,您会在一个隐式类中定义所有这些方法。但是随后您遇到了错误,其中两种方法都接受 List
有相同的删除,编译器不会允许它。但是,您可以使用 DummyImplicit
解决这个问题。 :
class World
object World {
implicit class WithWorld(_world: World) {
def world(): Unit = println("world")
def world(i: List[Int]): Unit = println("list Int")
def world(i: List[String])(implicit d: DummyImplicit): Unit = println("list String")
}
}
scala> val world = new World
world: World = World@4afcd809
scala> world.world()
world
scala> world.world(List(1, 2, 3))
list Int
scala> world.world(List("a", "b", "c"))
list String
关于scala - 为什么不能重载无参数方法,对于隐式类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977005/
我是一名优秀的程序员,十分优秀!