【发布时间】:2014-04-07 09:53:19
【问题描述】:
我正在尝试扩展 List 类以提供一些更简化的方式来比较大小,但是我遇到了标题中的错误...
这是我的代码:
implicit class RichList[A, B](input: List[A]) {
def >(that: List[B]): Boolean = input.size > that.size
def <(that: List[B]): Boolean = input.size < that.size
}
我的想法是,由于它所做的只是比较列表的大小,它们的类型可能不同并且没关系,但是当我尝试这样做时:
val test = List(1,2,3,4) < List(1,2,3,4,5)
我得到了前面提到的错误。如果我删除 B 并将 that 设置为 List[A] 类型,它可以正常工作,但是我将无法使用包含 2 种不同类型的列表...
为什么 A 和 B 不能是同一类型?还是我错过了什么?
编辑:好的,我找到了错误的解决方案,这很简单:
implicit class RichList[A](input: List[A]) {
def >[B](that: List[B]): Boolean = input.size > that.size
def <[B](that: List[B]): Boolean = input.size < that.size
}
但是我的问题仍然存在;为什么我不能这样做?
【问题讨论】:
-
你也可以使用这个:
def >(that: List[_]): ....因为你不关心实际类型 -
这实际上可能是个好主意......奇怪我怎么没想到
标签: scala generics type-mismatch enrich-my-library