类和对象之Scala程序

想要编写能够独立运行的scala程序,就必须创建有main方法(仅带一个参数Array[String],且结果类型为Unit)的单例对象。任何拥有合适签名的main方法的单例对象都可以用来作为程序的入口点。如例:

package scalaTest
object Test4{
    def show(arg:String) = {
        arg + ": text" 
    }
}

package scalaTest
import Test4.show        //相当于java中的静态导入
object Summer{
    def main(args:Array[String]) {
        for(arg <- args) {
            println(show(arg))
        }
    }
}

这里单例对象的名字是Summer。它的main方法有合适的签名,所以可以用作程序入口。
import test4.show是对定义在前面Test4对象中show方法的引用。它允许你在后面的文件里使用方法的简化名(注:这类似于java中的静态导入)。
注意scala的每个源文件都隐含了对包:java.lang、scala,以及单例对象Predef的成员引用。包scala中的Predef对象包含了许多有用的方法。例如,scala源文件中写下println语句,实际调用的是Predef 的println(Predef.println转而调用Console.println,完成真正的工作)。写下assert,实际是在调用Predef.assert。

Scala和java之间有一点不同,java需要你把公共类放在以这个类命名的源文件中,而scala对于源文件的命名没有硬性规定。然而通常情况下如果不是脚本,推荐的风格是像在java里那样按照所包含的类名来命名文件。上例中,Summer.scala都不是脚本,因为它们都以定义结尾。反过来说,脚本必须以结果表达式结束。因此如果你尝试以脚本方式执行Summer.scala,scala解释器将会报错说(scala2.11.7下好像也没有报错!!!!)Summer.scala不是以结果表达式结束的(当然前提是你没有在Summer对象定义之后加上任何你自己的表达式)。正确的做法是,你需要用scala编译器真正地编译这些文件,然后执行输出的类文件

方式一:
使用scala的基本编译器:scalac,输入:

$ scalac Summber.scala

开始编译源文件,不过在编译完成之前或许会稍微停顿一下。这是因为每次编译器启动时,都要花一些时间扫描jar文件内容,并在开始编译你提交的源文件之前完成更多其他的初始化工作。因此,scala的发布包里还包括了一个叫做fsc快速scala编译器,fast scala compiler)的scala编译器后台服务。

方式二:
使用scala的快速编译器(fsc),如下:

$ fsc Summer.scala

第一次执行fsc时,会创建一个绑定在你计算机端口上的本地服务器后台进程。然后它就会把文件列表通过端口发送给后台进程,由后台进程完成编译。下一次执行fsc时,检测到后台进程已经在运行了,于是fsc将只把文件列表发给后台进程,它会立刻开始编译文件。使用fsc,只须在首次运行的时候等待java运行时环境的启动。如果想停止fsc后台进程,可以执行:

fsc  -shutdown

不论执行scalac还是fsc命令,最终都将完成Java类文件的创建,然后可以用scala命令,就像之前的例子里调用解释器那样运行它。

你可能感兴趣的:(scala)