主方法中的Scala App val初始化 [英] Scala App val initialization in main method
本文介绍了主方法中的Scala App val初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些代码:
object Main extends App
{
val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r
override def main (args:Array[String])
{
// Why is NameTemplate null here?
}
}
为什么在主方法中未初始化NameTemplate
?
Why is NameTemplate
not initialized within the main method?
推荐答案
如果使用的是App
特征,则无需覆盖main
方法-只需将代码编写在
If you are using App
trait, then you don't need to override main
method - just write your code in the body of the 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
访问参数.
It works because App
trait extends DelayedInit trait which has very special initialization procedure. You can even access arguments with args
, as shown in the example.
如果您不想扩展App
,您仍然需要编写main
方法,但是在这种情况下,它可以按预期工作:
You still need to write main
method if you don't want to extend App
, but in this case it will work as expected:
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)
}
}
这篇关于主方法中的Scala App val初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文