문제

다음 변수가 있습니다 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
        }
      }
    }
  )
}

스칼라 컴파일러는 유형 불일치를 찾기 때문에 재 할당을 질식시킵니다.

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.

도움이 되었습니까?

해결책

지정된 값을 반환하는 Ruby와 달리 Scala Return Unit (일명 Scala 's Not Null Null)의 과제. 귀하의 방법은 [Flotserie] 목록 대신 유닛을 반환하려고합니다.

추가하다:

return series

방법으로 또는 반환 장치로 변경하십시오.

케이스 클래스를 사용하여 코드를 단순화하고 적절한 경우 올바른 일치 할 수도 있습니다.

  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
  }

나는 Scala 자신을 처음 접했기 때문에 ymmv.

다른 팁

제거하다 series = 맵 함수를 시리즈에 할당하고 아무것도 반환하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top