Рекурсивное значение нуждается в типе - Scala Swing - PullRequest
4 голосов
/ 05 августа 2011

У меня есть простое приложение с панелью, и я хочу приостановить и возобновить рисование, когда щелкну по нему.

object ModulusPatterns extends SimpleSwingApplication {
  var delay_ms = 200

  def top = new MainFrame {
    contents = panel
  }

  val panel = new Panel {
    override def paintComponent(g: Graphics2D) { /* draw stuff */ }
    listenTo(mouse.clicks)
    reactions += {
      case e: MouseClicked => {
        val r: Boolean = repainter.isRunning
        if (r) repainter.stop() else repainter.start()
      }
    }
  }

  val repainter = new Timer(delay_ms, new ActionListener {
    def actionPerformed(e: ActionEvent) {
      panel.repaint
    }
  })

  repainter.start()
}

В строке определения val r появляется ошибка компиляции:

error: recursive value repainter needs type
val r: Boolean = repainter.isRunning

Насколько я могу судить, я не делаю здесь ничего рекурсивного. Это ошибка? Есть обходные пути?

1 Ответ

7 голосов
/ 05 августа 2011

Насколько я могу судить, я не делаю здесь ничего рекурсивного.

Да, вы: определение panel относится к repainter, а определениеrepainter относится к panel.Так что ошибок нет, и вам нужно указать типы для них.

...