所提供的代码片段是一个虚构的简约示例,仅用于说明问题,与实际的业务逻辑类型无关。
在下面的代码中,我们在Entry类型内部有一个嵌套Registry类型。
class Registry[T](name: String) {
case class Entry(id: Long, value: T)
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为不同注册表的条目是不同的,不可比拟的类型。
然后,我们可能有一个隐式的Ops类,例如,在测试中使用的类,它将我们的注册表绑定到某些测试存储实现(一个简单的可变映射)
object testOps {
import scala.collection.mutable
type TestStorage[T] = mutable.Map[Long, T]
implicit class RegistryOps[T](val self: Registry[T])(
implicit storage: TestStorage[T]
) {
def getById(id: Long): Option[self.Entry] =
storage.get(id).map(self.Entry(id, _))
def remove(entry: self.Entry): Unit = storage - entry.id
}
}
Run Code Online (Sandbox Code Playgroud)
的问题是:所述Entry包装物被视为无法比拟的类型到原来的注册表对象consructed内行动
object problem {
case class Item(name: String)
val items = new Registry[Item]("elems")
import testOps._
implicit val storage: TestStorage[Item] =
scala.collection.mutable.Map[Long, …Run Code Online (Sandbox Code Playgroud)