【问题标题】:List equality using parser combinators使用解析器组合器列出相等性
【发布时间】:2011-10-04 14:44:01
【问题描述】:

我从这里获取了一些 Scala CSV 解析代码:

Use Scala parser combinator to parse CSV files

然后我尝试为它写一个基本的测试:

assertEquals(List(List()), CSV.parse(""))

这失败了,有消息:

java.lang.AssertionError: 预期:scala.collection.immutable.$colon$colon 但是是:scala.collection.immutable.$colon$colon

有什么想法吗? CSV.parse 的输出是一个空 List[List[String]] 但似乎与 List(Nil) 或 ListList[String] 等具有不同的 hashCode。我似乎找不到任何方法来组成一个列表等于 CSV.parse("") 的输出。

更新:

这是使用 REPL 的失败:

scala> assertEquals(List(Nil), CSV.parse("")) 
java.lang.AssertionError: expected: scala.collection.immutable.$colon$colon<List(List())> but was: scala.collection.immutable.$colon$colon<List(List())>

【问题讨论】:

    标签: scala parser-combinators


    【解决方案1】:

    已编辑:我尝试了您在链接中提供的解析器:

    scala> CSV.parse("")
    res7: List[List[String]] = List(List(""))
    

    显然,它不会返回带有空列表的列表,而是带有带有空字符串的列表的列表。所以你的测试应该会失败。

    【讨论】:

    • 很好,谢谢,就是这样。让我感到困惑的是 println(List(List("")) 和 println(List[List[String]](Nil)) 具有相同的输出,所以在我的 println 调用和 JUnit 失败中我似乎得到了两边的值相同。
    • 我(还)不明白 REPL 如何/为什么显示与 toString 不同的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多