Я пытаюсь написать выражение на основе класса объекта.
case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree
case class Leaf(char: Char, weight: Int) extends CodeTree
val l1 = new Leaf('A', 1)
val l2 = new Leaf('B', 1)
val f1 = new Fork(l1, l2, List(l1.char, l2.char), l1.weight + l2.weight)
Я пробовал два метода, но у них есть проблемы.
Метод 1:
val w: Int = f1 match {
case Fork(_, _, _, w) => println("I am a fork")
case Leaf(_, w) => println("I am a Leaf")
}
Получена ошибка:
Error:(15, 8) constructor cannot be instantiated to expected type;
found : Leaf
required: Fork
case Leaf(_, w) => {w}
Метод 2:
if (l1.isInstanceOf[Fork]) println("I am a fork") else println("I am a leaf")
Получено предупреждение:
Warning:(10, 20) fruitless type test: a value of type Leaf cannot also be a Fork
if (l1.isInstanceOf[Fork]) println("I am a fork") else println("I am a leaf")