2 つのケース クラスに一致するこの比較関数が必要ですが、少し冗長です。
リーフは、リスト内で常にソートされた順序になっています。
abstract class CodeTree
case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree
case class Leaf(char: Char, weight: Int) extends CodeTree
def sortCodeTreeFun(x: CodeTree, y: CodeTree) = {
(x, y) match {
case (x1: Leaf, y1: Leaf) => true
case (x1: Fork, y1: Leaf) => x1.weight < y1.weight
case (x1: Leaf, y1: Fork) => x1.weight < y1.weight
case (x1: Fork, y1: Fork) => x1.weight < y1.weight
}
}
CodeTree コンストラクターを次のように変更しようとしました。
abstract class CodeTree(weight: Int)
x と y を直接比較できるようにしますが、コンパイラは次のように言います。
「コンストラクタ CodeTree の引数が不十分です: (重み: Int)patmat.Huffman.CodeTree」
sortCodeTreeFun メソッドを短縮する別の方法はありますか?