Scala入门(3):Scala程序编译

1. 入门程序

object Hello {
      def main(args:Array[String]) { 
        println("Hello, Scala。") 
      }   
}

对于包含 main 方法的 object 声明,引入了一个通常被称为单例对象(singleton object)的概念,也就是有且仅有一个实例
的类。

main 方法并没有声明为 static。这是因为 Scala 中不存在静态成员(无论方法还是属性,methods or fields)这一概念,
Scala 使用前述的单例对象(singleton objects)中的成员来代替静态成员。

Scala 的编译器 的工作流程和多数编译器类似:从命令行上接收待编译的源文件名(source file)以及编译参数,生
成一个或者多个目标文件(object files,或者叫对象文件)。Scala 生成的目标文件是标准的 java class 文件。

2. 采用Java工具类的Scala

import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
object FrenchDate {
  def main(args: Array[String]) {
    val now = new Date
    val df = getDateInstance(LONG, Locale.FRANCE)
    println(df format now)
    }
}

结果:

5 janvier 2021

要想引入一个包中的多个类,在 Scala 中可以写在一行上,只需要把多个类名放到一个大括号中(curly braces, {})即可。如果要引入一个包或者类中的所有名字,Scala 使用下划线(underscore,_)而不是星号(asterisk,*),这是因为,在 Scala中,星号是一个合法的标识符(比如:方法名)。

如果一个方法只接受一个参数,那么可以使用 infix 语法,df format nowdf.format(now)的语义完全相同,只是前者更加简洁。

Scala 中可以直接继承 Java的类或者实现 Java 的接口。

3. Scala 一切皆对象

假如我们要开发一个定时器,该定时器每秒钟执行一定的动作,我们如何把要执行的动作传给定时器?最直
观的回答是:传一个实现动作的函数(function)。

负责定时的函数(function)名为:oncePerSecond,它接受一个回调函数作为参数,该回调函数的类型记为:() => Unit,代表任何无参数、无返回值的函数(Unit 和 C/C++中的 void 类似)。



object Timer {
  def oncePerSecond(callback: () => Unit){
    while (true) { callback(); Thread sleep 1000}
  }
  
  def timerAction(){
    println("Time files like an arrow.")
  }
  
  def main(args: Array[String]){
    oncePerSecond(timerAction)
  }
}

运行结果:

Time files like an arrow.
Time files like an arrow.
Time files like an arrow.
Time files like an arrow.

参考:

  1. scala;
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页