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 = {}
欢迎任何意见。谢谢
return
来自 process
函数,它不是最 scala 惯用的方式,但这样做很好,有时它会改进 performances/readability。
scheduleWithFixedDelay 延迟是在一个执行的终止和下一个执行的开始之间。
- System.exit(0) 将终止 jvm,因此之后什么都不会 运行。
抛出异常取决于:如果在
process
函数中抛出异常,那么它将重新 运行。调度程序实际上是 运行 run
函数,它捕获从 process
. 抛出的所有异常。
def process() :Unit {}
已弃用,不应使用。总是使用
def process() :Unit = {}
方式。
这段代码似乎是从java转换过来的,我认为这不是学习scala的好起点。
无论如何,最好的学习方法就是尝试。花点时间'play'用一下吧。
我正在学习 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 = {}
欢迎任何意见。谢谢
return
来自process
函数,它不是最 scala 惯用的方式,但这样做很好,有时它会改进 performances/readability。 scheduleWithFixedDelay 延迟是在一个执行的终止和下一个执行的开始之间。- System.exit(0) 将终止 jvm,因此之后什么都不会 运行。
抛出异常取决于:如果在
process
函数中抛出异常,那么它将重新 运行。调度程序实际上是 运行run
函数,它捕获从process
. 抛出的所有异常。
def process() :Unit {}
已弃用,不应使用。总是使用def process() :Unit = {}
方式。
这段代码似乎是从java转换过来的,我认为这不是学习scala的好起点。 无论如何,最好的学习方法就是尝试。花点时间'play'用一下吧。