递归值需求类型 - Scala Swing

Lui*_*hys 4 swing scala

我有一个带面板的简单应用程序,我想在点击它时暂停并重新开始绘画.

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()
}
Run Code Online (Sandbox Code Playgroud)

我在val r定义行上遇到编译错误:

error: recursive value repainter needs type
val r: Boolean = repainter.isRunning
Run Code Online (Sandbox Code Playgroud)

据我所知,我在这里没有做任何递归的事情.这是一个错误吗?任何解决方法?

Ale*_*nov 7

据我所知,我在这里没有做任何递归的事情.

是的,你是:定义是panelrepainter,而定义是repainterpanel.所以没有错误,你需要为它们指定类型.

  • 看来我只需要指定`panel`或`repainter`之一的类型.编译器告诉我问题是在'val r = ...`行中让我感到困惑.我很惊讶它不能在这里推断出类型. (2认同)