【发布时间】:2010-10-21 19:33:03
【问题描述】:
我有一个想在 scala.collection.mutable.PriorityQueue 中使用的类,但我不想仅仅为了这个目的而将其设为 Ordered[A]。我不认为我想对 PriorityQueue 使用的排序作为类的自然排序。
class MyObject (sequence: Int, values: List[String]) ...
因此,在我的 PriorityQueue 中,我希望这些值按“序列”排序。但是,仅仅因为两个对象具有相同的序列并不能使它们自然相等,因为它们的“值”的内容可能不同。
这就是在 Java 中能够为 PriorityQueue 提供替代 Comparator 对象的地方。我的比较器会简单地根据对象的“序列”对对象进行排序,而忽略它们的“值”。
PriorityQueue 类必须用“A
class PriorityQueue[A <% Ordered[A]] extends ...
根据我的阅读,这意味着我的类必须扩展 Ordered[A] 或者我必须提供到 Ordered[A] 的“隐式 def”类型转换,老实说,这感觉不优雅。
Java 解决方案似乎更“实用”,允许我传递类似 Comparator 函数的对象,而不是强迫我进入类层次结构或猴子修补我的类。
我意识到使用 PrioirityQueue 有其他替代方法,但我觉得我可能会在 Scala 学习曲线上遇到困难,并且不想在没有充分探索这个设计决策的情况下放弃。
这只是 Scala 库中的一个不幸决定,还是我误解了某种使 PriorityQueue 更有用和“功能”的调用约定?
谢谢
【问题讨论】:
标签: scala priority-queue comparator