我有以下变量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 {

我在做什么错在这里?现在看来似乎应该返回一个列表[FlotSeries]可以分配给series。由于编译器发现Unit我想到的是如何foreach总是返回Unit,我可是match运算符返回匹配的表达式的最后一个值,而不是Unit

有帮助吗?

解决方案

在斯卡拉回单位分配(又名斯卡拉不是很空空),不像红宝石返回指定的值。您的方法试图返回代替列表[FlotSerie]单位。

添加:

return series

到您的方法,或改变它以返回单元。

您也可以使用case类以及正确的匹配,如果是适当的简化代码:

  case class FlotSerie(label:Full, data:List[Tuple2[Double, Double]])
  var series: List[FlotSerie] = List( FlotSerie(Full("Min"), Nil), FlotSerie(Full("Max"), Nil), FlotSerie(Full("Avg"), Nil) )

  def updateSeries(sample: Sample): List[FlotSerie] = {
    series = series.map(serie => {
      serie.label match {
        case Full("Min") => FlotSerie(serie.label, (sample.timestamp.toDouble, sample.min) :: serie.data)
        case Full("Max") => FlotSerie(serie.label, (sample.timestamp.toDouble, sample.max) :: serie.data)
        case Full("Avg") => FlotSerie(serie.label, (sample.timestamp.toDouble, sample.avg) :: serie.data)
      }
    })
    return series
  }

我是很新,斯卡拉自己,所以因人而异。

其他提示

删除series =你指定的地图功能系列并没有返回任何东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top