gpt4 book ai didi

scala - 在scala中,是否可以有一个只有两个元素的Set?

转载 作者:行者123 更新时间:2023-12-02 18:04:38 25 4
gpt4 key购买 nike

最后,我想要一个案例类 Swap,以便 Swap(a, b) == Swap(b, a)

我认为我可以使用两个元素的集合,它完全可以完成工作:

scala> case class Swap(val s:Set[Int])
defined class Swap

scala> Swap(Set(2, 1)) == Swap(Set(1, 2))
res0: Boolean = true

但这允许任意数量的元素,我想将我的元素限制为两个。我找到了 Set.Set2 类,它是具有两个元素的不可变 Set 的默认实现,但它无法按照我尝试的方式或其变体工作:

scala> val a = Set(2, 1)
a: scala.collection.immutable.Set[Int] = Set(2, 1)

scala> a.getClass
res3: Class[_ <: scala.collection.immutable.Set[Int]] = class scala.collection.immutable.Set$Set2

scala> case class Swap(val s:Set.Set2[Int])
defined class Swap

scala> val swp = Swap(a)
<console>:10: error: type mismatch;
found : scala.collection.immutable.Set[Int]
required: Set.Set2[Int]
val swp = Swap(a)
^

所以我的问题是:

  • 有办法像我一样使用 Set2 吗?
  • 有更好的方法来实现我的案例类 Swap 吗?我读到不应在案例类中覆盖 equals,尽管这是我的第一个想法。

最佳答案

这是一个通用实现 -

import scala.collection.immutable.Set.Set2

def set2[T](a: T, b: T): Set2[T] = Set(a, b).asInstanceOf[Set2[T]]

case class Swap[T](s: Set2[T])

Swap(set2(1,2)) == Swap(set2(2,1)) //true

您的解决方案不起作用的原因是签名问题

Set(elems: A*): Set

如果有 2 个元素,具体类型将为 Set2,但编译器不知道这一点,因此您必须将其强制转换为 Set2

关于scala - 在scala中,是否可以有一个只有两个元素的Set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361841/

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