文档介绍:: .
mport .{Date, Locale}
import
import
object FrenchDate {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, )
println(df format now)
}
}Scala的import语句看上去与Java的非常相似,但是它更加强大。你可以使用大
括号来导入同一个包里的多个类,就像上面代码中第一行所做的那样。另一个不
同点是当导入一个包中所有的类或者符号时,你应该使用下划线(_)而不是星
号(*)。这是由于星号在Scala中是一个有效的标识符(例如作为方法名称)。
这个例子我们稍后会遇到。
第三行的 import 语句导入了 DataFormat 类中的所有成员,这使得静态方法
getDateInstance 和静态变量 LONG 可以被直接引用。
在 main 函数中,我们首先建立了一个 Java 的 Date 实例。这个实例默认会包含
当前时间。接下来我们一个使用刚才导入的静态函数 getDateInstance 定义了
日期格式。最后我们将使用 DataFotmat 格式化好的日期打印了出来。最后一行
代码显示了 Scala 的一个有趣 的语法:只有一个参数的函数可以使用下面这样
的表达式来表示:
df format now
其实就是下面的这个冗长的表达式的简洁写法
(now)
这看起来是一个语法细节,但是它导致一个重要的后果,我们将在下一节进行说
明。
另外,我们还应当注意到 Scala 中可以直接继承或者实现 Java 中的接口和类。
4 Scala:万物皆对象
Scala 作为一个纯面向对象的语言,于是在 Scala 中万物皆对象,包括数字
和函数。在这方面,Scala 于 Java 存在很大不同:Java 区分原生类型(比如
boolean 和 int)和引用类型,并且不能把函数当初变量操纵。
数字和对象
由于数字本身就是对象,所以他们也有方法。事实上我们平时使用的算数表
达式(如下例)
1 + 2 * 3 / x
是由方法调用组成的。它等效于下面的表达式,我们在上一节见过这个描述。
(1).+(((2).*(3))./(x))
这也意味着 +,-,*,/ 在Scala中也是有效的名称。在第二个表达式中的这些括号是必须的,因为 Scala 的分词器使用最长规则
来进行分词。所以他会把下面的表达式:
1.+(2)
理解成表达项 1. ,+,和 2 的组合。这样的组合结果是由于
的表达项并且比表达项 1 要长,表达项 ,使得它成为一个 double
而不是 int。而下面的表达式阻止了分析器错误的理解
(1).+(2)
函数与对象
函数在 Scala 语言里面也是一个对象,也许这对于 Java 程序员来说这比较
令人惊讶。于是吧函数作为参数进行传递、把它们存贮在变量中、或者当作另一
个函数的返回值都是可能的。吧函数当成值进行操作是函数型编程语言的基石。
为了解释为什么吧函数当作值进行操作是十分有用的,我们来考虑一个计时
器函数。这个函数的目的是每隔一段时间就执行某些操作。 那么如何吧我们要做
的 操作传入计时器呢?于是我们想吧他当作一个函数。这种目前