Scala 因子分析应用程序特征

Scala 因子分析应用程序特征,scala,Scala,我有一个应用程序,它利用了Apptrait,而且运行良好。但是继承自App的object变得有点笨拙,所以我想将一些功能拆分为traits。特别是,我想分离出命令行参数处理 不幸的是,这似乎不适合DelayedInit。所以这很好: object Main extends App { println("arguments are: "+ args.mkString.mkString(", ")) } trait CommandLineArguments { self: App =>

我有一个应用程序,它利用了
App
trait,而且运行良好。但是继承自
App
object
变得有点笨拙,所以我想将一些功能拆分为traits。特别是,我想分离出命令行参数处理

不幸的是,这似乎不适合
DelayedInit
。所以这很好:

object Main extends App {
  println("arguments are: "+ args.mkString.mkString(", "))
}
trait CommandLineArguments { self: App => 
  delayedInit {
     println("arguments are: "+ args.mkString.mkString(", "))
  }
}
但这会引发一个
NullPointerException

trait CommandLineArguments { this: App =>
  println("arguments are: "+ args.mkString.mkString(", "))
}

object Main extends App with CommandLineArguments

有没有什么方法可以让DelayedInit“包含”混合特征?

看起来很奇怪,如果这样写,效果很好:

object Main extends App {
  println("arguments are: "+ args.mkString.mkString(", "))
}
trait CommandLineArguments { self: App => 
  delayedInit {
     println("arguments are: "+ args.mkString.mkString(", "))
  }
}
但是来自scaladocs(http://www.scala-lang.org/api/current/index.html#scala.DelayedInit):

继承DelayedInit标记trait的类和trait将具有 它们的初始化代码重写如下。[code]变为delayedInit([code]) 初始化代码包括所有语句和所有值定义 在初始化期间执行的