【发布时间】:2010-12-13 06:25:55
【问题描述】:
我有以下变量series:
var series: List[FlotSerie] = List(
new FlotSerie() {
override val label = Full("Min")
},
new FlotSerie() {
override val label = Full("Max")
},
new FlotSerie() {
override val label = Full("Avg")
}
)
不幸的是,我在使用以下方法时遇到编译器错误,该方法采用新数据点并根据新数据和旧系列将 series 更新为新的 List[FlotSeries]。
def updateSeries(sample: Sample): List[FlotSerie] = {
series = series.map(serie =>
serie match {
case item if item.label == Full("Min") => {
new FlotSerie() {
override val label = item.label
override val data = (sample.timestamp.toDouble, sample.min) :: serie.data
}
}
case item if item.label == Full("Max") => {
new FlotSerie() {
override val label = item.label
override val data = (sample.timestamp.toDouble, sample.max) :: serie.data
}
}
case item if item.label == Full("Avg") => {
new FlotSerie() {
override val label = item.label
override val data = (sample.timestamp.toDouble, sample.avg) :: serie.data
}
}
}
)
}
Scala 编译器在重新分配时阻塞,因为它发现类型不匹配:
error: type mismatch;
found : Unit
required: List[net.liftweb.widgets.flot.FlotSerie]
series = series.map(serie => serie match {
我在这里做错了什么?它似乎应该返回一个可以分配给series 的 List[FlotSeries]。既然编译器找到了Unit,我就想到了foreach怎么总是返回Unit,但是match操作符返回的是匹配表达式的最后一个值,而不是Unit。
【问题讨论】: