摘要: 本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,比如中文粘贴会出现乱码、多行代码粘贴时会出错,此时需要用到REPL的高级功能。在日常开发过程中,我们粘贴多行代码的时候会遇到下列问题: //本意是要粘贴下面两行代码
本节主要内容
- REPL命令行高级使用
- 使用Scala进行Linux脚本编程
- 结束语
1. REPL命令行高级使用
在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,比如中文粘贴会出现乱码、多行代码粘贴时会出错,此时需要用到REPL的高级功能。在日常开发过程中,我们粘贴多行代码的时候会遇到下列问题:
而对于一些长串跨行的代码,可能会出现报错,例如:
那要怎么办呢?在REPL命令行中执行下列命令:
先输入:paste,然后按ctr+v键,可以正常粘贴内容,中文也不会出现乱码了:
另外,在实际开发过程中,有些人会认为这种处理方式非常繁琐,Scala的创建者也为我们考虑过这个问题了,我们也可以在scala IDE for eclipse (在Intellij IDEA 中也有这个功能) 里面利用REPL命令行,使用方式是创建scala worksheet,创建方式如下:
1 点击相应的包,然后右键,在new菜单中选择 scala worksheet
2 在文件中输入相应的scala语句,worksheet会自动打印出相应的结果
但是worksheet对中文的支持很不友好,例如下面的代码:
worksheet最终得到的中文是乱码,因此在实际进行语言特性测试的时候尽量避免中文
scala中还有很多我们实际中没有接触过的命令,可以用 :help命令查看REPL现在支持的所有命令:
2. 使用Scala进行Linux脚本编程
本节Linux脚本内容大部分来源于scala cookbook,部分经过本人修改以在Ubuntu Linux上进行演示。
我们在第一节中提到,Scala不仅仅可以进行大规模分布式应用程序开发(例如Spark内存计算框架),也可以进行服务器端脚本编程即它可以替代Linux中的shell (Bourne Shell, Bash)或其它如 Perl, PHP, Ruby等可用于服务器端脚本编程的语言。下面给出的是一个简单示例(前提是要有linux操作系统,本节所有示例都是在ubuntu Linux下运行的):
将上面的内容保存为hello.sh文件,然后用下列命令增加其执行权限:
可以看到我们第一个服务器脚本已经运行成功。前面的代码中,#!符号表示的是Unix shell脚本的开始,它会调用Unix Bourne shell。exce命令是内置的shell,表示需要执行scala 命令,其中0绑定的是hello.sh脚本名称,@ 绑定的是我们输入的参数。!#表示脚本声明头部的结束。在脚本中可以使用任何的scala语法,例如:
上述代码执行结果:
除此之外,我们还可以定义应用程序对象,可以扩展自App,也可以实现自己的Main方法,例如:
下面给出的是不带参数的执行结果:
下面给出的是带参数的执行结果,如:
当然,还可以实现自己的main方法,如:
同extends App是一样的。
如果脚本中需要应用到第三方库的话,可以采用下列方式进行包引入:
通过上述代码不难发现,脚本编程与一般的Scala应用程序开发有着非常多的相似之处,不同之处仅在于在脚本编程需要加入下面这样的样板代码
有时候,我们也需要对命令行参数进行捕获(例如判断命令行的个数或输入的参数类型等),然后进行相应的操作,前面已经演示了如何打印输出命令行参数,这里我们更多实际中可能会遇到的一些经典案例:
1 判断输入参数的个数,不满足要求则给出提示
执行结果如下:
2 交互式命令行,提示用户输入
下面给出的是其执行结果:
3 加速代码的执行:
scala脚本在执行的过程中,也是通过编译、执行的步骤来进行的,有时候为加速脚本的执行,意图是将编译后的脚本保存下来,在执行时候如果脚本创建之后没有发生变化的话,则直接使用以前编译好的脚本。实现方式是在脚本声明的时候用-savecompiled。
它的原理是在代码第一次执行后,生成相应的jar文件,当下次再执行的便调用该jar文件来执行,第一次执行后生成的jar文件如下:
3. 结束语
本节内容是scala入门到精通系列课程的最后一节,通过本课程,我相信可以让大家成为一个中级scala语言开发者。Scala语言功能非常强大,其中内容还有很多,还有许多内容我们没有涉及,例如scala 的GUI编程、Scala的定界延续等,但这些功能在实际开发中应用的并不是特别广泛,特别是Scala GUI编程,我们知道java在GUI编程方面并不是它的强项,scala语言也是如此。这门课程的目的是让大家学完之后能够快速上手spark应用程序开发,希望在学完本课程之后,大家将这门课作为自己学习scala的起点,而非终点。
相关推荐
Scala简介&快速入门 基础语法 变量 数据类型 流程控制 操作符重载 模式匹配 函数式编程基础 函数式编程说明 函数定义/声明 函数运行机制 递归 函数注意事项和细节 过程 惰性函数和异常 面向对象编程初级...
资源名称:Scala编程语言从入门到精通资源目录:【】DesignOfScala【】ExcitedScala_7(1)【】lift-lift_23_sbt-cf313e1【】ScalaTutorial-zh_CN【】Scala_2.7.6_API【】Scala向导(前13章)【】Scala向导(前15章)-p...
#### 三、Scala的安装与配置 - **安装 Scala**:访问官方网站 [http://www.scala-lang.org/](http://www.scala-lang.org/) 下载最新版本的 Scala。推荐使用 JDK 1.8 或更高版本作为运行环境。 - **安装 SBT**:虽然...
第三章 运算符 001.导学 01.算术运算符 02.赋值运算符 03.关系运算符 04.逻辑运算符 05.进制和8421码 06.原反补码计算规则 07.位运算符 08.案例_交换变量值 第四章 流程控制结构 00.导学 01.流程控制结构之顺序结构...
这份“资料-scala入门到精通.zip”压缩包显然是为初学者和有一定经验的开发者设计的,旨在帮助他们全面理解和掌握Scala语言。 Scala的基础知识包括: 1. **语法特性**:Scala的语法简洁而富有表现力,它引入了...
【课程大纲】第1讲-Spark的前世今生第2讲-课程介绍、特色与价值第3讲-Scala编程:基础语法第4讲-Scala编程:条件控制与循环第5讲-Scala编程:函数入门第6讲-Scala编程:函数入门之默认参数和带名参数第7讲-Scala编程...
**IDEA集成Scala编程环境详解** 在现代软件开发中,IntelliJ IDEA作为一款强大的Java集成开发环境(IDE),也提供了对Scala语言的完美支持。本文将详细介绍如何在IntelliJ IDEA中集成Scala开发环境,以便高效地进行...
项目概述:邮电学院Scala大数据实时处理——基于Lambda架构的Spark源码实践 本项目为邮电学院假期师资培训的成果,主要采用Scala语言开发,围绕Lambda架构构建了一套实时数据流处理系统。项目包含35个文件,其中...
Scala是一种多范式的编程语言,设计目标是融合面向对象编程和函数式编程的特性,它在Java虚拟机(JVM)上运行,因此可以无缝地与Java代码交互。本篇文章主要面向有一定Java开发经验的程序员,旨在帮助他们入门Scala。 ...
Scala编程入门教材旨在引导初学者踏入Scala这一强大且多用途的编程语言的世界。Scala结合了面向对象编程(OOP)和函数式编程(FP)的特性,为开发者提供了丰富的工具来构建高效、可扩展的软件系统。以下是Scala编程...
基于 Scheme、Haskell 等老牌函数式语言的传统教材的问题在于,相关语言的语法和思维方式与读者现有的知识体系迥异,容易造成较为陡峭的入门门槛。此外,由于这些语言本身的实际应用机会不多,初学者也难以在实战中...