- Scala编程实战(原书第2版)
- (美)阿尔文·亚历山大
- 589字
- 2024-04-15 12:05:12
1.4 scalac和scala命令
问题
虽然你通常会使用像sbt或Mill这样的工具来构建Scala应用程序,但偶尔你可能会想使用更基础的工具来编译和运行小型测试程序,就像你可能会使用javac和java来处理小型Java应用程序一样。
解决方案
用scalac编译小程序,然后用scala运行它们。例如,有以下名为Hello.scala的Scala源码文件:
使用scalac在命令行中编译:
然后用scala运行它,给scala命令传递一个用@main标记的方法名:
讨论
在Scala中,编译和运行类(包括像classpath这样的概念)与Java是一样的。例如,假设有一个名为Pizza.scala的文件中有一个Pizza类,并且它依赖一个Topping类型:
假设Topping的定义是这样的:
它在名为Topping.scala的文件中,并且已经在一个名为classes的子目录中被编译成了Topping.class,可以这样编译Pizza.scala:
注意,scalac命令有很多额外的选项可以使用。例如,如果你在前面的命令中加上-verbose选项,你会看到数百行额外用来显示scalac是如何工作的输出行。这些选项可能会随着时间的推移而改变,所以可以使用-help选项来查看额外的信息:
main方法
在我们谈论编译main方法的时候,需要了解Scala 3可以用两种方式来声明main方法:
·在一个方法上使用@main注解。
·在一个object中声明一个签名正确的main方法。
如上所述,一个简单的无参@main方法可以这样声明:
也可以声明一个@main方法来接收命令行传入的参数,比如在这个例子中接收一个String和一个Int类型的参数:
在使用scalac编译这段代码后,可以这样来运行:
对于第二种方法,在object内部声明main方法就像在Java中声明main方法一样,而Scala中的main方法的签名必须是这样的:
这段Scala代码与下面的Java代码类似: