这两个记录具有相同的字段,但具有相同的值,但顺序不同:
val person1 = ("age" ->> 34) :: ("name" ->> "Jane") :: HNil
val person2 = ("name" ->> "Jane") :: ("age" ->> 34) :: HNil
当我使用==
时,这些被认为是不相同的,因为字段的顺序不同。它们是HList
s,因此在检查相等性时,顺序很重要,但我觉得相互排列的记录应该是平等的。我也觉得他们应该有相同类型,但他们没有,因为他们是HList
。
有没有办法让记录的值和类型相等,更符合我的预期?另外,这种方式实施的原因是什么?是否可以使用HMap
代替?
答案 0 :(得分:6)
您可以使用Align
执行此类操作。
import shapeless._, syntax.singleton._, record._, ops.hlist._
def permutatedEqual[R1 <: HList, R2 <: HList](
r1: R1, r2: R2
)(implicit
align: Align[R1, R2]
): Boolean = align(r1) == r2
您可以将其用作:
permutatedEqual(person1, person2) // Boolean = true