0

メソッドに次のコードがあります。

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。

4

2 に答える 2

0

あなたはelse句を持っている必要があります:

   if (zoom > 50) g.setPaintColour(ColourInt.white) else ...

ブノワ

于 2014-01-28T12:33:34.820 に答える