一 、问题描述
执行一个Scala Obejct 程序,Java 沿袭过来的当然直接用main,Scala 官方还提供了另外的一种方法
- 定义的object extend App trait
- 在object中定义好main()
二、Scala CookBook
这是一段对《 Scala Cookbook》的摘抄,6.4 如何运行一个Scala Object 应用
2.1 extends App
object Launch extends App {
print("extends App to run this object")
}
继承了这个App,这个object会自动的run ,就像它嵌入在mian方法中一样
$ scalac Launch.scala
$ scala Launch
extends App to run this objec
scalac 编译 .scala 文件,scala run Launch.class
当用这个方法的时候,任何 命令行 参数 都 作为 args对象 隐式可用,这都是App继承下来的。
args对象:一个Array[String] ,就像你自己声明的一样
object Launch extends App {
if(args.length == 1)
print(s"arguments' length is 1,and the value is${args(0)}")
else
print("arguments' length is != 1")
}
2.2 main()
略 和java一样
三 、区别
App是一种更方便的方式去创建可执行的scala,和main()的区别是 延迟初始化(当真正使用的时候才会启动)
scala App trait
注意用两种launch 方式都是用的 object 而不是 class
我更倾向于用App去处理 大型程序 或者 脚本
see also
https://stackoverflow.com/questions/11667630/difference-between-using-app-trait-and-main-method-in-scala