Scala:来自 Runnable 的 return

Scala: return from Runnable

我正在学习 Scala。我正在阅读 Scala 程序:

class MyProg() extends StrictLogging with Runnable {
  private val scheduledFuture = new AtomicReference[ScheduledFuture[_]]
  def start() = {
    scheduledFuture.set(executor.scheduleWithFixedDelay(this, initialDelaySeconds, intervalSeconds, TimeUnit.SECONDS))
  }

  def stop() = {
    Option(scheduledFuture.get()).map(_.cancel(true))
  }

  override def run() = try {
    process()
  } catch {
    case e: Exception => logger.warn("Error", e)
  }

  def process() :Unit {
    // do something
    if (condition) return // Line 203
    // do something else
  }
}

另一段代码开始 Runnable:

Option(myProg).map(_.start)

我的问题:

1、从return里面出来一个Runnable是对的吗? process() 计划每 intervalSeconds 秒 运行。即使有时从内部 process() return ,它仍然会在 intervalSeconds 秒后被调用。我说得对吗?

2、这里可以用System.exit(0)或者throw new Exception("...")吗? System.exit(0)throw new Exception("...") 调用后,process() 将再次被调用 ?

3,对了,为什么是def process() :Unit {}?我们可以使用 def process() :Unit = {}

欢迎任何意见。谢谢

  1. return 来自 process 函数,它不是最 scala 惯用的方式,但这样做很好,有时它会改进 performances/readability。 scheduleWithFixedDelay 延迟是在一个执行的终止和下一个执行的开始之间。
  2. System.exit(0) 将终止 jvm,因此之后什么都不会 运行。 抛出异常取决于:如果在 process 函数中抛出异常,那么它将重新 运行。调度程序实际上是 运行 run 函数,它捕获从 process.
  3. 抛出的所有异常。
  4. def process() :Unit {} 已弃用,不应使用。总是使用 def process() :Unit = {} 方式。

这段代码似乎是从java转换过来的,我认为这不是学习scala的好起点。 无论如何,最好的学习方法就是尝试。花点时间'play'用一下吧。