您可以用很少的代碼檢查自己這樣的:
object Bar {
def unapply(x: Int): Option[Option[Int]] = {
println("Checking: " + x)
Some(None)
}
}
1 match {
case Bar(Some(x)) => println("do something")
case Bar(None) => println("do something else")
}
當你運行它,你就會得到:
Checking: 1
do something else
所以它看起來像斯卡拉沒有做多次調用Bar.unapply
即使代碼看起來會有多個調用。從效率的角度來看,這很好,但是您應該避免在您的unapply
方法中依賴於它們每次匹配語句被調用多次的副作用。
如果你擔心當優化情況,使之清楚的是,unapply
纔會被調用一次的讀者,你可以很容易分裂的比賽:
1 match {
case Bar(y) => y match {
case Some(x) => println("do something")
case None => println("do something else")
}
}
來源
2012-05-10 01:06:48
dhg
我認爲這個計劃是在2.10中對案例類進行改進 – llemieng