2.1 Scala解释器下的REPL

开始Scala的最简单的方式就是使用Scala解释器——一个编写Scala表达式和程序的交互式shell。 在命令行窗口键入scala,即可开启Scala解释器的交互模式。 如果安装没有问题的话,你将看到如下输出:

  1. Welcome to Scala version 2.10.0.final (Java ...).
  2. Type in expressions to have them evaluated.
  3. Type :help for more information.
  4. scala>

这意味着你的Scala已经安装成功。 我跑的是2.10.0版本的Scala,所有的示例代码都能在这个和比这个高的版本上运行。 在Scala命令行,键入42并回车,你将看到如下输出:

  1. scala> 42
  2. res0: Int = 42

第一行是你的输入。 Scala解释器读到你输入的42,经过计算得知它是一个整型字面量,因此创建一个Int型对象来表示它,并将其返回到控制台进行打印。 res0是Scala解释器创建的指向这个对象的变量的名字(在你的机器上可能得到不同的变量名,因为变量名是由Scala解释器在运行时根据上下文情况动态创建的)。 如果此时键入这个变量名,例中的res0,你会在命令行窗口看到如下类似输出:

  1. scala> res0
  2. res1: Int = 42

这些步骤合在一起被称为read-evaluate-print loop (REPL,读算写循环)。 你可以在Scala解释器中反复执行read-evaluate-print循环的步骤。 现在,你可以编写你的第一个Scala版的Hello World了:

  1. scala> println("Hello world")
  2. Hello world

你调用了println函数,向它传入了一个字符串类型的参数Hello world,结果是Scala将这个字符串原样输出。

定义 println是定义在scala.Console类中的一个函数,它内部通过调用System.out.println来向控制台打印信息。 Scala的Predef(标准库的一部分)会将println映射到Console.println,这样你就不必在用它的时候加上Console前缀了。

在第1章中,我提到过Scala可以很好的和Java进行集成,但是并没有列举相关示例。 现在补充如下:

  1. scala> val myList = new java.util.ArrayList[String]()
  2. myList: java.util.ArrayList[String] = []

在这个例子中,你创建了一个java.util.ArrayList类的实例,它可以存放String类型的对象。 如果你想不起在myList上有哪些方法可以被调用,不必担心,因为Scala解释器会对此为你提供帮助。 键入myList,后接下个.号,按下Tab键,此时Scala解释器会列出所有可以调用的方法。 除了能够列出给定数据类型的方法之外,还可以对解释器已知的变量名和类名进行自动补全。 我建议你在Scala解释器上多花点时间,研究一下它的可用功能,并且把它应用在书中的例子当中。 REPL能够给出快速反馈,应该把它当成学习一门新语言的重要组成部分。 表2.1展示了REPL的可用选项。

表2.1 重要的Scala解释器命令

命令 描述
:help 这个命令打印Scala解释器中所有可用命令的帮助信息
:cp 使用这个命令可以为Scala解释器在classpath中添加一个jar文件。例如,:cp tools/junit.jar操作试图在当前目录寻找一个JUnit JAR文件,如果找到则把它添加到classpath中,以使你可以访问这个JAR文件中的类
:load or :l 允许你加载Scala文件到解释器。如果你想研究某个Scala文件中的代码,你可以把它加载到Scala解释器,这样其中所有定义的东西就都可用了
:replay or :r 重置解释器并重播所有先前执行过的命令
:quit or :q 从解释器中退出
:type 不用计算就展示出表达式的类型。例如,:type 1 + 2,不用执行加法操作即可判断出表达式的类型为Int

链接