本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书
第2章 Scala解释器(REPL)
本章介绍Scala中的一个重要工具Scala解释器。Scala解释器是一个直接执行Scala代码,并返回结果的工具,它的工作过程可以分为:读取、求值、打印,三个部分,并且不断循环。Scala解释器对应的英文是:Read-eval-print-loop,缩写就是REPL。
2.1 REPL基本使用
运行Scala解释器的命令如下
[user@localhost ~]$ scala
运行后的界面如下
scala>
可以在>后面输入Scala代码
scala> println("Hello World!")
Scala解释器直接给出执行的结果
Hello World!
& REPL可以即时反馈结果,便于快速试错。以HelloWorld为例,在REPL中,不需要像之前那样,要创建一个HelloWorld.scala文件,然后声明Package,import package,声明object,编写main函数代码,然后编译、运行,在REPL中仅仅只需要输入最关键的代码,非常方便。
退出REPL
scala> :q
& Scala解释器执行程序的原理:读入代码=>翻译成字节码=>JVM执行字节码=>获得结果=>控制台显示;
& REPL中定义的变量,在后面可以引用,如果后面又定义了同名变量,则以后面的定义为准。
2.2 查看REPL帮助
scala> :help
会显示Scala解释器的内置命令,如下所示,所有的内置命令都是以冒号(:)开头。
:edit <id>|<line> edit history
:help [command] print this summary or command-specific help
:history [num] show the history (optional num is commands to show)
:h? <string> search the history
......
2.3 REPL快捷键
REPL中的快捷键及说明如下表所示
表3-1 REPL常用快捷键及使用说明
序号 | 功能 | 快捷键 | 使用说明 |
1 | 遍历历史命令 | 上下光标键 | 按动上下光标键,可以查看之前在REPL输入的命令。 |
2 | 补全 | Tab键 |
|
2.4 REPL输入多行
输入
scala> var i=0
输出
i: Int = 0
输入while循环,共4行,输入第一行后,回车,会出现REPL会显示|,后面输入第二行内容,再回车,REPL又会显示|,输入第三行内容,再回车,直到第四行}结束。
scala> while (i < 3) {
| println(i)
| i+=1
| }
REPL执行输出如下。
0
1
2
结论:
- 如果上下两行没有关系,直接输入;
- 如果上下两行在一个大括号内,则加上大括号,按行顺序输入,切记,REPL中,一行输入就过了,没有办法把光标再移动到前面的行来编辑的。在REPL中用结对编程不太好,例如输入下面的代码后,按照结对编程的习惯,左右括号同时出现,因此,会在输入左括号{后,回车,输入右括号},这样,REPL会直接执行,而不会给机会去编辑{}内的代码。
scala> while (i < 3) {
2.5 REPL导入与导出
复制文件中的代码到REPL,有2种方法:
1)打开文件,复制代码,在REPL中直接粘贴。
& 复制和粘贴的方法,因打开工具而异:例如,Putty.exe中,选中即复制,右键即粘贴;在Xfce4 Terminal中,复制要先选中,然后右键选中Copy,粘贴则要右键,选中Paste;
& 导入代码时,如果代码长的话,建议分成多个部分,每次只导入几行代码,这样便于排除错误。
2)在REPL中使用:paste命令,粘贴,完毕后使用ctrl +d退出
scala> :paste
粘贴,注意:粘贴后的代码,也是无法修改的。
var i=0
while(i < 3){
println(i)
i+=1
}
按ctrl + d,REPL输出如下
0
1
2
导出REPL中的代码或命令使用:history,例子如下
scala> :history
REPL会列出最近的命令和代码,如下,这样,可以把这些输出再复制到文件中,保存起来。
36 var i=0
37 while(i < 3){
38 println(i)
39 i+=1
40 }
41 :history
加艾叔微信,加入Linux(Shell+Zabbix)、大数据(Spark+Hadoop)、云原生(Docker+Kubernetes)技术交流群
关注艾叔公众号,获取更多一手信息