ho il seguente codice:Scala - designazione di un elemento abbinati a pattern matching
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
}
}
}
Le domande sono:
1) Quando il pattern matching ha successo con una pecora, come posso accedervi è capelli e cambiarlo? Si è lamentato della riassegnazione a val e ho quindi inserito var
nel costruttore ma ...
2) Un altro modo in cui posso pensare è assegnare l'intero valore corrispondente a una variabile, esiste un modo per associare un valore corrispondente a un modello di costruttore case class in una variabile?
(So che potrei probabilmente eseguire lo schema su qualcosa come s: Sheep
e quindi chiamare s.changeHairTo(None)
ma quello è il modo meno preferibile).
Mentre funziona, preferirei il primo blocco di 4e6 come alternativa migliore. Nella dichiarazione del caso sai che hai a che fare con un 'Sheep', quindi non è necessario che tutti gli animali abbiano a che fare con capelli mutabili. In generale, ridurre al minimo la mutabilità è una buona cosa, e l'approccio alternativo consente a cani e gatti di avere capelli immutabili. –
Sono assolutamente d'accordo con te in entrambi i punti. Ma le sue classi Cat e Dog hanno già dei campi mutabili ;-) – drexin