> 34) :: ("name" ->> "Jane") :: HNil val person2 = (-6ren">
gpt4 book ai didi

scala - 无形可扩展记录的相等性取决于字段顺序

转载 作者:行者123 更新时间:2023-12-02 20:59:47 24 4
gpt4 key购买 nike

这两条记录具有相同的字段和相同的值,但顺序不同:

val person1 = ("age" ->> 34) :: ("name" ->> "Jane") :: HNil
val person2 = ("name" ->> "Jane") :: ("age" ->> 34) :: HNil

当我使用 == 时,这些不被认为是相等的,因为字段的顺序不同。它们是 HList,所以对我来说,检查相等性时顺序很重要,但我觉得彼此排列的记录应该相等。我也觉得它们应该具有相同的类型,但它们没有,因为它们是 HList 的。

有没有办法让记录的值和类型相等,以使其更像我所期望的那样?另外,这样实现的原因是什么?可以使用 HMap 来代替吗?

最佳答案

您可以使用对齐执行类似的操作。

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

关于scala - 无形可扩展记录的相等性取决于字段顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com