メソッドに次のコードがあります。
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)
}
エラーが発生します:
型の不一致; found : Seq[swing.Graphics2D => Any] required: Seq[swing.Graphics2D => Unit] AreaESw.scala /prStratSw/src/pGrid/pUISw 49行目 Scalaの問題
このエラーは、paintSeq :+= メソッドに関するものです。if ステートメントが Unit ではなく Any を返すのはなぜですか? if ステートメントの後に次の行を追加することで、エラーを取り除くことができます。
val dummy = 0
ただし、最後に return Unit を追加すると:
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。