购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 安装Scala

为了能够尽可能快地安装并运行Scala,本节将讲述如何安装命令行工具,使用这些工具便能运行本书列举的所有示例 。本书示例中的代码使用了Scala 2.11.2 进行编写及编译。这也是编写本书时最新的版本。绝大多数代码无须修改便能运行在早期版本 2.10.4 上,而一些团队也仍在使用这一版本。

相较于 2.10,Scala 2.11 引入了一些新的特性,不过此次发布更侧重于整体性能的提升以及库的重构。Scala 2.10 与 2.9 版本相比,也引入了一些新的特性。也许你们部门正在使用其中的某一版本,而随着学习的深入,我们会讨论这些版本间最重要的差别。(参阅http://docs.scala-lang.org/scala/2.11/了解2.11 版本,参阅http://www.scala-lang.org/download/2.10.4.xhtml#Release_Notes了解 2.10 版本。)

安装步骤如下。

安装 Java

针对Scala 2.12 之前的版本,你可以选择Java 6、7、8 三个版本,在安装Scala之前,你必须确认你的电脑上已经安装了Java。(Scala 2.12 计划于 2016 年年初发布,该版本将只支持Java 8。)假如你需要安装Java,请登录Oracle的网站(http://www.oracle.com/technetwork/java/javase/downloads/index.html),遵循指示安装完整的Java 开发工具包 (JDK)。

安装 SBT

请遵循scala-sbt.org(http://www.scala-sbt.org/release/tutorial/Setup.html)网页上的指示安装SBT,它是业内公认的构建工具。安装完成后,便可以在Linux、OS X终端和Windows命令窗口中运行sbt命令。(你也可以选择其他的构建工具,21.2.2 节将介绍这些工具。)

获取本书源代码

本书前言中描述了如何下载示例代码。压缩包可以解压到你电脑中的任何文件夹。

运行 SBT

打开shell或命令行窗口,进入示例代码解压后的目录,敲入命令sbt test,该命令会下载所有的依赖项,包括Scala编译器及第三方库,请确保网络连接正常,并耐心等待该命令执行。下载完毕后,sbt会编译代码并运行单元测试。此时你能看到很多的输出信息,该命令最后会输出success信息。再次运行sbt test命令,由于该命令不需要执行任何事情,你会发现命令很快就结束了。

祝贺你!你已经真正开始了Scala的学习。不过,你也许会想安装其他一些有用的工具。

在学习本书的大多数时候,通过使用SBT,你便能使用其他工具。SBT会自动下载指定版本的Scala编译器、标准库以及需要的第三方资源。

不使用SBT,也能很方便地单独下载Scala工具。我们会提供一些SBT外使用Scala的例子。

请遵循Scala官方网站(http://www.scala-lang.org)中的链接安装Scala,还可以选择安装Scaladoc。Scaladoc是Scala版的Javadoc(在Scala 2.11 中,Scala库和Scaladoc被切分为许多较小的库)。你也可以在线查阅Scaladoc(http://www.scala-lang.org/api/current)。为了方便你使用,本书中出现的Scala库中的类型,大部分都附上了连接到Scaladoc页面的链接。

Scaladoc在页面左侧类型列表上面提供了搜索栏,这有助于快速查找类型。同时,每个类型的入口处都提供了一个指向Scala GitHub库中对应代码的链接(https://github.com/scala/scala),这能很好地帮助用户学习这些库的实现。这个链接位于类型概述讨论的底部,链接所在行标注着Source字样。

你可以选用任何文本编辑器或IDE来处理这些示例,也可以为这些主流编辑器或IDE安装Scala支持插件。具体方法,请参见 21.3 节。通常而言,访问你所青睐的编辑器的社区,能最及时地发现Scala相关的支持信息。

1.2.1 使用SBT

21.2.1 节将介绍SBT是如何工作的。下面,我们介绍当前需要掌握的一些基本指示。

当你启动sbt命令时,假如不指定任何任务,SBT将启动一个交互式REPL(REPL是Read、Eval、Print、Loop的简写,代表了“读取-求值-打印-循环”)。下面我们将运行该命令,并尝试运行一些可用的任务。

下面列举的代码中,$表示shell命令提示符(如bash命令提示符),你可以在该提示符下运行sbt命令;>是SBT默认的交互提示符,可以在#符号后编写sbt注释。你可以以任意顺序输入下面列举的大多数sbt命令。

为了能编译更新后的代码并运行对应测试,我通常会执行~test命令。SBT使用了增量的编译器和测试执行器,因此每次执行时不用等待完全构建所需时间。假如你希望执行其他任务或退出sbt,只需要按一下回车键即可。

假如你使用安装了Scala插件的Eclipse进行开发,便能很方便地执行eclipse任务。运行eclipse任务将生成对应的项目文件,这些生成的代码作为Eclipse项目文件进行加载。如果你想使用Eclipse来处理示例代码,请执行eclipse任务。

假如你使用最近发布的Scala插件IntelliJ IDEA进行开发,直接导入SBT项目文件便能生成IntelliJ项目。

Scala中已经包含了REPL环境,你可以执行console命令启动该环境。如果你希望在REPL环境下运行本书中的代码示例,那么通常情况下,你首先需要运行console命令:

此处省去若干输出,与SBT REPL一样,你也可以使用Ctrl-D退出系统。

运行console时,SBT首先会构建项目,并通过设置CLASSPATH使该项目可用。因此,你也可以使用REPL编写代码进行试验。

使用Scala REPL能有效地对你编写的代码进行试验,也可以通过REPL来学习API,即便是Java API亦可。在SBT上使用console任务执行代码时,console任务会很体贴地为你在classpath中添加项目依赖项以及编译后的项目代码。

1.2.2 执行Scala命令行工具

如果你单独安装了Scala命令行工具,会发现与Java编译器javac相似,Scala编译器叫作scalac。我们会使用SBT执行编译工作,而不会直接使用scalac。不过如果你曾运行过javac命令,会发现scalac语法也很直接。

在命令行窗口中运行-version命令,便可查看到当前运行的scalac版本以及命令行参数帮助信息。与之前一样,在$提示符后输入文本。之后生成的文本便是命令输出。

与之类似,执行下列scala命令也可以查看Scala版本及命令参数帮助。

有时我们会使用scala来运行Scala“脚本”文件,而java命令行却没有提供类似的功能。下面将要执行的脚本来源于我们的示例代码:

我们将调用scala命令执行该脚本。也请读者尝试运行该示例。上述代码使用的文件路径适用于Linux和Mac OS X系统。我假设,当前的工作目录位于代码示例所在的根目录。如果使用Windows系统,请在路径中使用反斜杠。

现在我们终于满足了编程图书或向导的一条不成文的规定:第一个程序必须打印“HelloWorld!”。

最后提一下,执行scala命令时,如果未指定主程序或脚本文件,那么scala将进入REPL模式,这与在sbt中运行console命令类似。(不过,运行scala时的classpath与执行console任务的classpath不同。)下面列出的REPL会话中讲解了一些有用的命令。(如果你未独立安装Scala,在sbt中执行console任务也能进入Scala REPL环境)。此时,REPL提示符是scala>(此处省略了一些输出信息)。

我们为变量s赋予了string值'Hello,World!',通过使用val关键字,我们将变量s声明成不可变值。println函数(http://www.scala-lang.org/api/current/index.xhtml#scala.Console$)将在控制台中打印一个字符串,并会在字符串结尾处打印换行符。

println函数与Java中的System.out.println(http://docs.oracle.com/javase/8/docs/api/java/ lang/System.html)作用一致。同样,Scala也使用了Java提供的String类型(http://docs. oracle.com/javase/8/docs/api/java/lang/String.html)。

接下来,请注意我们要将两个数字相加,由于我们并未将运算的结果赋予任何一个变量,因此REPL帮我们将变量命名为res3,我们可以在随后的表达式中运用该变量。

REPL支持tab补全。例子中显示输入命令s.con<tab>表示的是在s.con后输入tab符。REPL将列出一组可能会被调用的方法名。在本例中表达式最后调用了contains方法。

最后,调用:quit命令退出REPL。也可以使用Ctrl-D退出。

接下来,我们将看到更多REPL命令,在 21.1 节中,我们将更深入地探索REPL的各个命令。

1.2.3 在IDE中运行Scala REPL

下面我们将讨论另外一种执行REPL的方式。特别是当你使用Eclipse、IntelliJ IDEA或NetBeans时,这种方式会更加实用。Eclipse和IDEA支持worksheet功能,当你编辑Scala代码时,感觉不到它与正常地编辑编译代码或脚本代码有什么区别。不过一旦将该文件保存,代码便会立刻被执行。因此,假如你需要修改并重新运行重要的代码片段,使用这种开发方式比使用REPL更为方便。NetBeans也提供了一种类似的 交互式控制台 功能。

假如你想要使用上述的某个IDE,可以参考 21.3 节,掌握Scala插件、worksheet以及交互式控制台的相关信息。 JbhPuwdTkwnGk+qf8fGFO4e03Ds2QpyT6EKVxcyMmCluFgM7eNehEXY1EWu9+gxv

点击中间区域
呼出菜单
上一章
目录
下一章
×