深入比较Scala中元组中的数组

use*_*284 1 scala

我试图比较Scala中包含数组的元组作为一些测试的一部分,并遇到一个似乎比较数组对象而不是内容的问题.

比较数组本身工作正常; 这传递:

assertResult(Array[Byte](0.toByte, 2.toByte))(Array[Byte](0.toByte, 2.toByte))
Run Code Online (Sandbox Code Playgroud)

但是,当我将数组放入一个元组,与一个long配对时,我得到一个例外

这是测试代码:

assertResult((12345678L, Array[Byte](0.toByte, 2.toByte)))((12345678L, Array[Byte](0.toByte, 2.toByte)))
Run Code Online (Sandbox Code Playgroud)

我得到的例外是:

org.scalatest.exceptions.TestFailedException: Expected (12345678,[B@2473d930), but got (12345678,[B@35047d03)
Run Code Online (Sandbox Code Playgroud)

从它打印出数组的内存位置的方式来看,它让我觉得它是在比较对象引用而不是深入比较数组中的每个对象.

这是Scala中的预期,还是我在这里做错了什么?谢谢阅读.

Mic*_*jac 6

如果你调用它会工作deepArrayS:

assertResult((12345678L, Array[Byte](0.toByte, 2.toByte).deep))((12345678L, Array[Byte](0.toByte, 2.toByte).deep))
Run Code Online (Sandbox Code Playgroud)

这实际上只是转换Array为一个,IndexedSeq所以它可以进行equals比较(而不是默认的参考比较Array).assertResult如果顶级比较是a Array,这似乎就是这样,但如果Array它嵌套在另一个对象中则不行.这就是第一个例子有效的原因,但第二个例子没有.

鉴于此,这可能非常不方便,您可能会考虑使用不同的集合类型Array.