Scala的delayedInit和Scallop

时间:2014-01-24 11:50:03

标签: scala

SLS 5.1说“延迟初始化。在超类构造函数调用之后的对象或类(但不是特征)的初始化代码和模板基类的mixin-evaluation被传递给一个特殊的钩子,它是不可访问的通常,该钩子只是执行传递给它的代码。但是继承scala.DelayedInit特征的模板可以通过重新实现delayedInit方法来覆盖该钩子,该方法定义如下:“

def delayedInit(body: => Unit)

ScallopConf command-line parser扩展DelayedInitusing 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")
  }
}

1 个答案:

答案 0 :(得分:2)

在访问help之前,conf.afterInit() lazy val 并调用conf.help应清除编译器警告。