繁体   English   中英

Scala 在列表中实现特征的排序案例类

[英]Scala Ordering case classes implementing a trait in a list

我有扩展特征令牌和 function 的案例类,它返回使用案例 class apply 方法和适当参数创建的实例列表。

该特征定义了一个属性名称,在每种情况下都会被覆盖 class。

单元测试调用一个方法,该方法返回案例 class 实例的列表,并尝试断言结果列表与预期列表相同。 这可行,但列表之间的比较依赖于顺序,虽然我可以更改预期列表以匹配返回列表的顺序,但这会使测试取决于方法实现,这不是我希望做的事情。

解决方案似乎是根据特征中定义的名称值对列表进行排序,因为案例 class 的每个实例都具有相同的名称。

我已经尝试了几件事,到目前为止最好的结果是将extends Ordering[Token]添加到 Token 特征中,编译除了我得到的列表排序 function

No implicit Ordering defined for B

我在令牌特征中比较 function 是

  def compare(x: Token, y: Token): Int =
    x.name.compareToIgnoreCase(y.name)

可能有更好的方法来忽略列表中的顺序,但是我想至少了解我在这里做错了什么并让排序工作。

非常感谢您的任何建议,祝大家新年快乐。

你有Tokenimplicit Ordering吗? 这样的事情应该有效:

trait Token {
  def name: String
}

object Token {
  implicit val ord: Ordering[Token] = Ordering.by(_.name.toLowerCase)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM