SLS 5.1说“延迟初始化。在超类构造函数调用之后的对象或类(但不是特征)的初始化代码和模板基类的mixin-evaluation被传递给一个特殊的钩子,它是不可访问的通常,该钩子只是执行传递给它的代码。但是继承scala.DelayedInit特征的模板可以通过重新实现delayedInit方法来覆盖该钩子,该方法定义如下:“
def delayedInit(body: => Unit)
ScallopConf
command-line parser扩展DelayedInit
和using it according to the docs会生成警告Selecting value apples from class Conf, which extends scala.DelayedInit, is likely to yield an uninitialized value
。
如何重写以下简单示例以便不生成警告?
import org.rogach.scallop._
class Conf(arguments: Seq[String]) extends ScallopConf(arguments) {
val help = opt[Boolean](name = "help", short = 'h', descr = "Help me please.")
}
object Gen {
def main(args: Array[String]) {
val conf: Conf = new Conf(args)
if (conf.help()) {
println(s"""Usage: Gen [--help]""")
sys.exit(-1)
}
println("Do some work here")
}
}
答案 0 :(得分:2)
在访问help
之前,conf.afterInit()
lazy val 并调用conf.help
应清除编译器警告。