簡體   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