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])
初始化代码包括所有语句和所有值定义
在初始化期间执行的