我有以下代码:斯卡拉 - 图案匹配的匹配项目的指定
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)
但这是最不可取的方式)。
虽然这个工程,我宁愿4e6的第一个块作为一个更好的选择。你在案件陈述中知道你正在处理“羊”,所以没有必要让所有的“动物”必须处理可变的头发。一般来说,最小化可变性是一件好事,而另一种方法可以让猫和狗也拥有不变的头发。 – 2012-03-12 09:44:44
我完全同意你的观点。但他的猫和狗班已经有可变的头发领域;-) – drexin 2012-03-12 14:56:25