加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用默认值初始化时的未绑定占位符参数

发布时间:2020-12-16 10:05:03 所属栏目:安全 来源:网络整理
导读:这是代码: package scalafx.ensemble.example.chartsimport javafx.scene.chart.PieChart.Dataimport scala.util.Randomimport scalafx.application.JFXAppimport scalafx.scene.Sceneimport scalafx.Includes._import scalafx.collections.ObservableBuffe
这是代码:

package scalafx.ensemble.example.charts

import javafx.scene.chart.PieChart.Data

import scala.util.Random
import scalafx.application.JFXApp
import scalafx.scene.Scene
import scalafx.Includes._
import scalafx.collections.ObservableBuffer
import scalafx.scene.chart.PieChart
import scalafx.scene.input.MouseEvent

object BasicPie extends JFXApp {
  // data level 1
  val pieChartDataBuffer: ObservableBuffer[Data] = ObservableBuffer(
    PieChart.Data("A",20),PieChart.Data("B",30),PieChart.Data("C",10),PieChart.Data("D",40)
  )

  pieChartDataBuffer.foreach(
    (data: Data) => data.node().onMouseClicked = {
      (_: MouseEvent) => pieChart.data = pieChartDataSubBuffer(data.name())
    }
  )

  val pieChart = new PieChart {
    data = pieChartDataBuffer
    title = "DrillDown Pie Chart"
  }

  // data level 2
  val pieChartDataSubBuffer: Map[String,ObservableBuffer[Data]] = _
  Array("A","B","C","D").foreach(
    (letter: String) => {
      val subData: ObservableBuffer[Data] = _
      (1 to 10).foreach(
        i => {
          val subName = letter + "-" + i
          subData.add(PieChart.Data(subName,Random.nextInt(100)))
        }
      )
      pieChartDataSubBuffer.updated(letter,subData)
    }
  )

  pieChartDataSubBuffer.foreach(
    (nameDataBufferTuple) => {
      nameDataBufferTuple._2.foreach(
        (data: Data) => {
          data.node().onMouseClicked = {
            (_: MouseEvent) => pieChart.data = pieChartDataBuffer
          }
        }
      )
    }
  )

  // set listener for one data node
  def drillDownData = (pieData: Data,pie: PieChart) => {
    pieData.node().onMouseClicked = (_: MouseEvent) => pie.data = pieChartDataSubBuffer(pieData.name())
  }

  stage = new JFXApp.PrimaryStage {
    title = "Drilldown Pie Chart Example"
    scene = new Scene {
      root = pieChart
    }
  }

}

可以期望使用null初始化subData,但是我得到一个错误:未绑定的占位符参数.为什么?

解决方法

你不能创建一个未初始化的val,因为你以后永远不能分配任何有用的东西.

假设您明确说明:

val subData: ObservableBuffer[Data] = null

subData = ObservableBuffer.empty -> error: reassignment to val!
subData.add(data) -> NullPointerException

您可以将其初始化为var

var subData: ObservableBuffer[Data] = _

或者(特别是在可变集合的情况下)作为空缓冲区

val subData: ObservableBuffer[Data] = ObservableBuffer.empty // comes to mind

你的代码会建议你想要做后者.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读