[英]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)
可能有更好的方法來忽略列表中的順序,但是我想至少了解我在這里做錯了什么並讓排序工作。
非常感謝您的任何建議,祝大家新年快樂。
你有Token
的implicit
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.