Frage

Ich habe die folgende Variable 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")
  }
)

Leider erhalte ich einen Compiler-Fehler mit dem folgenden Verfahren, die einen neuen Datenpunkt nimmt und Updates series mit einem neuen List[FlotSeries] auf der Grundlage der neuen Daten und der alten Serie.

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
        }
      }
    }
  )
}

Die Scala-Compiler Drosseln auf der Neuzuordnung, weil es einen Typenkonflikt findet:

error: type mismatch;
found   : Unit
required: List[net.liftweb.widgets.flot.FlotSerie]
   series = series.map(serie => serie match {

Was mache ich hier falsch? Es scheint, wie sollte es eine Liste [FlotSeries] zurückkehren, die series zugeordnet werden können. Da der Compiler Unit finde ich dachte daran, wie foreach immer Unit zurückkehrt, ich bin aber der match Operator gibt den letzten Wert des Ausdrucks abgestimmt, nicht Unit.

War es hilfreich?

Lösung

Zuordnungen in Scala Rückkehr Unit (aka Scala ist nicht ganz null null), im Gegensatz zu Rubin, das gibt den zugewiesenen Wert. Ihre Methode versucht Einheit zurückzukehren statt List [FlotSerie].

Anzahl:

return series

auf Ihre Methode, oder ändern Einheit zurückzukehren.

Sie können auch Ihren Code anhand von Fallklassen und eine richtige Anpassung vereinfachen, wenn es angebracht ist:

  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
  }

Ich bin ziemlich neu in Scala ich so YMMV.

Andere Tipps

entfernen series = sind Sie die Karte Funktion Serie zugeordnet und nichts zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top