在「在Scala編程(第二版)」在410頁,你可以找到類模擬這有以下方法:在Scala中使用模式匹配時真的很簡單嗎?
private def next() {
(agenda: @unchecked) match {
case item :: rest =>
agenda = rest
curtime = item.time
item.action()
}
}
我很好奇,爲什麼Odersky的實現了這個與模式匹配,而不是就這樣:
private def next() {
val item = agenda.head
agenda = agenda.tail
curtime = item.time
item.action()
}
模式匹配如此高效以至於根本無關緊要嗎? 或者它只是不完美的例子?
模式匹配版本將拋出MatchException如果模式不匹配 – gerferra 2011-12-26 19:43:07
@gerferra:我認錯。但是無論如何,模式匹配版本都有一個簡單的解決方法。我會更新答案。 – 2011-12-26 20:01:11
另一個版本也有一個簡單的解決方法:或者換成if(!agenda.isEmpty),或者使用'agenda.headOption.foreach {item => agenda = agenda.tail; curtime = item.time; item.action()}' – 2011-12-26 22:47:50