我有一些代码:
object Main extends App
{
val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r
override def main (args:Array[String])
{
// Why is NameTemplate null here?
}
}
为什么在主方法中未初始化
NameTemplate
? 最佳答案
如果使用的是App
特征,则无需重写main
方法-只需将代码编写在object
主体中:
object Main extends App {
val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r
println(NameTemplate)
val NameTemplate(name, version) = args(0)
println(name + " v" + version)
}
之所以起作用,是因为
App
特征扩展了具有非常特殊的初始化过程的DelayedInit特征。如示例所示,您甚至可以使用args
访问参数。如果您不想扩展
main
,您仍然需要编写App
方法,但是在这种情况下,它可以按预期工作:object Main {
val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r
def main(args: Array[String]) {
println(NameTemplate)
val NameTemplate(name, version) = args(0)
println(name + " v" + version)
}
}