最後,我想有一個案例類交換,以便交換(a,b)==交換(b,a)。在scala中,是否有可能只有兩個元素的Set?
我想我可以用兩個元素的集合,它相當這項工作:
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,這是一個不變的設置有兩個元素的默認實現,但它不工作的它我嘗試的方式,或變化:
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,儘管這是我的第一個想法。
謝謝,這是我使用的解決方案。爲了方便起見,我還添加了第二個構造函數'def this(t1:T,t2:T)= this(Set(t1,t2).asInstanceOf [Set2 [T]])',這允許我用'new Swap (t1,t2)'。 最後我用這種方式匹配模式: 'case Swap(s:Set2 [T])=> { val t1 = s.head val t2 = s.last ...} – 2015-02-06 13:00:58