У меня есть следующий код:
class Animal(hair: Option[Hair])
class Cat(var hair: Option[Hair]) extends Animal(hair)
class Dog(var hair: Option[Hair]) extends Animal(hair)
class Sheep(var hair: Option[Hair]) extends Animal(hair)
//then somewhere else:
def what(animal: Animal) {
animal match {
case Cat(hair) => println("processing cat, hair=" + hair)
case Dog(hair) => println("processing dog, hair=" + hair)
case Sheep(hair) => {
println("processing sheep, cutting hair...")
hair = None
}
}
}
Вопросы таковы:
1) Когда сопоставление с образцом успешно выполняется с овцой, как я могу получить доступ к ее волосам и изменить их? Он пожаловался на переназначение val, и затем я поместил var
в конструктор, но все же...
2) Еще один способ, который я могу придумать, - это присвоить все совпадающее значение переменной, есть ли способ привязать значение, соответствующее некоторому шаблону конструктора класса case, к переменной?
(Я знаю, что, вероятно, мог бы сопоставить что-то вроде s: Sheep
, а затем вызвать s.changeHairTo(None)
, но это наименее предпочтительный способ).