Set
ではなくcase class
、メソッドがありませんunapply
。
これら 2 つのことは、 で直接パターン マッチできないことを意味しますSet
。
(更新:ダニエルが彼の答えで正しく示しているように、独自のエクストラクタを定義しない限り)Set
代替手段を見つける必要があります。折り畳み機能を使用することをお勧めします
def union(s: Set[Int], t: Set[Int]): Set[Int] =
(s foldLeft t) {case (t: Set[Int], x: Int) => t + x}
または、ほとんどの明示的な型注釈を避ける
def union(s: Set[Int], t: Set[Int]): Set[Int] =
(s foldLeft t)( (union, element) => union + element )
またはさらに短い
def union(s: Set[Int], t: Set[Int]): Set[Int] =
(s foldLeft t)(_ + _)
s
これにより、 overの要素が蓄積t
され、1 つずつ追加されます
折りたたみ
参照が必要な場合は、折りたたみ操作のドキュメントを次に示します。
foldLeft[B](z: B)(op: (B, A) ⇒ B): B
二項演算子を開始値とこのセットのすべての要素に左から右に適用します。
注: 基礎となるコレクション タイプが順序付けられていない限り、実行ごとに異なる結果が返される可能性があります。または、演算子は結合的で交換可能です。
B the result type of the binary operator.
z the start value.
op the binary operator.
returns the result of inserting op between consecutive elements of this set, going left to right with the start value z on the left:
op(...op(z, x_1), x_2, ..., x_n)
where x1, ..., xn are the elements of this set.