我在方法中有以下代码:
aSides.foreach(as => as.side.terr match
{
case r: TerrSRiver => paintSeq :+= ((g: Graphics2D) =>
{
g.setPaintColour(ColourInt.blue)
g.fill(Polygon(as.paintStd(0.2)))
}
case _: TerrSCoast => paintSeq :+= ((g: Graphics2D) =>
{
g.setPaintColour(TerrSea.colour)
g.fill(Polygon(as.paintStd(0.2)))
}) //one case excluded for simplicity
paintSeq 在方法外声明
var paintSeq: Seq[Graphics2D => Unit] = Nil
这将按预期编译和运行。但是,如果我在第一种情况下添加 if 语句:
case r: TerrSRiver => paintSeq :+= ((g: Graphics2D) =>
{
g.setPaintColour(ColourInt.blue)
g.fill(Polygon(as.paintStd(0.2)))
if (zoom > 50) g.setPaintColour(ColourInt.white)
}
我收到一个错误:
类型不匹配; 找到:Seq[swing.Graphics2D => Any] 需要:Seq[swing.Graphics2D => Unit] AreaESw.scala /prStratSw/src/pGrid/pUISw 第 49 行 Scala 问题
该错误与paintSeq :+= 方法有关。为什么 if 语句返回 Any 而不是 Unit?我可以通过在 if 语句后添加一行来消除错误:
val dummy = 0
但是,如果我在最后添加返回单元:
case r: TerrSRiver => paintSeq :+= ((g: Graphics2D) =>
{
g.setPaintColour(ColourInt.blue)
g.fill(Polygon(as.paintStd(0.2)))
if (zoom > 50) g.setPaintColour(ColourInt.white)
return Unit
}
它编译时出现以下警告:
封闭方法 setVisObjs 具有结果类型 Unit:返回值被丢弃
但是当它运行时出现以下错误
线程“AWT-EventQueue-0”中的异常 scala.runtime.NonLocalReturnControl$mcV$sp
使用“return()”仍然会产生运行时异常。
这是 Scala Swing 代码,但我在 JavaFx Eclipse 下载中使用 Scala 2.10.3:Linux 上的 4.2.2。