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 你的代码会建议你想要做后者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |