博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018年第40周-scala入门-工具使用
阅读量:6700 次
发布时间:2019-06-25

本文共 6038 字,大约阅读时间需要 20 分钟。

工欲善其事必先利其器

简介

Scala是一个什么样的语言,很多人都可以百度到。 而且很多人学Scala,也是为了想能够灵活的运用spark来处理大数据。

在学习某门语言之前,先要熟悉其环境或工具。而表达工具是怎样使用,其实最好的媒介载体是视频。
所以有条件还是看视频,我这仅仅作为文字备忘。

安装

现在官网的入门教程,只有两个,一个是从Intellj,环境都集成在IDE里了。而另一个是纯命令行,而这纯命令行就有点特别,不是类似于Java那样,直接javac和java直接编译运行。这命令行入门,是直接一上来,就用一个scala的构建工具sbt(Simple Build Tool)。这个构建工具可以简单理解为maven先。

题外话,一上来就要学习一个新的构建工具,嗯,感觉不太友好,因为连scala是什么都没弄清楚,又得学习新的东西。静下心来,别着急,我就硬着头皮先学一学这工具。

我用的环境是操作系统,是基于Debian的linux操作系统。所以我采用Linux安装:

1.安装JDK8
1.1下载JDK8
1.2解压JDK8

tar -zxvf jdk-8u151-linux-x64.tar.gz

1.3配置环境变量/etc/profile

export JAVA_HOME=/home/gucci/jdk/jdk1.8.0_151 export PATH=$JAVA_HOME/bin:$PATH

2.通过APT软件包管理工具安装(此过程可能会受网络影响)

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.listsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823sudo apt-get updatesudo apt-get install sbt

其他安装sbt方式详情请

Hello Wrold

通过sbt的项目

新建项目

使用sbt new命令

gucci@gucci-PC:~/jc-demo/scala$ sbt new sbt/scala-seed.g8Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp[info] Set current project to scala (in build file:/home/gucci/jc-demo/scala/)[info] Set current project to scala (in build file:/home/gucci/jc-demo/scala/)A minimal Scala project. name [Scala Seed Project]: helloTemplate applied in ./hellogucci@gucci-PC:~/jc-demo/scala$ tree.└── hello    ├── build.sbt    ├── project    │   ├── build.properties    │   └── Dependencies.scala    └── src        ├── main        │   └── scala        │       └── example        │           └── Hello.scala        └── test            └── scala                └── example                    └── HelloSpec.scala9 directories, 5 files

在name那边输入栏里输入hello,然后就会创建一个新项目hello在当前目录下。

目录结构

基目录(Base ditectory)

在sbt术语中,项目的目录叫“基目录(Base ditectory)”。在上面例子中,hello项目包含hello/build.sbt文件,所以hello是基目录。

源码

sbt使用的目录结构跟maven一样,以下是相对于基目录的路径:

src/  main/    resources/      
<包含jar包>
scala/
<包含scala源码>
java/
<包含java源码>
test/ resources
<包含测试用的jar包>
scala/
<包含测试用的scala源码>
java/
<包含测试用的java源码>

除了上述目录外的源码目录,其他源码目录(包括隐藏目录)也会被sbt忽略。

sbt构建定义文件(sbt build definition files)

构建定义的内容都在build.sbt文件中。

运行

运行程序

进入hello目录,在sbt命令行里执行run命令。

gucci@gucci-PC:~/jc-demo/scala$ cd hello/gucci@gucci-PC:~/jc-demo/scala/hello$ sbtPicked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp[info] Loading project definition from /home/gucci/jc-demo/scala/hello/project[info] Updating ProjectRef(uri("file:/home/gucci/jc-demo/scala/hello/project/"), "hello-build")...[info] Done updating.[info] Compiling 1 Scala source to /home/gucci/jc-demo/scala/hello/project/target/scala-2.12/sbt-1.0/classes ...[info] Done compiling.[info] Loading settings from build.sbt ...[info] Set current project to Hello (in build file:/home/gucci/jc-demo/scala/hello/)[info] sbt server started at local:///home/gucci/.sbt/1.0/server/0b234651a6ca6d6afea4/socksbt:Hello> run[info] Updating ...[info] Done updating.[info] Compiling 1 Scala source to /home/gucci/jc-demo/scala/hello/target/scala-2.12/classes ...[info] Done compiling.[info] Packaging /home/gucci/jc-demo/scala/hello/target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT.jar ...[info] Done packaging.[info] Running example.Hello hello[success] Total time: 5 s, completed Oct 8, 2018 3:50:40 PMsbt:Hello>

在日常写代码,我们建议使用sbt命令行或以下持续构建测试的工具。

持续构建测试(Continuous build and test)

为了加快“编辑-编译-测试”这个流程。sbt可以在修改源码后自动编译和测试。

进入sbt命令行后,执行~后面加命令,如运行命令:~run

sbt:Hello> ~run[info] Packaging /home/gucci/jc-demo/scala/hello/target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT.jar ...[info] Done packaging.[info] Running example.Hello hello[success] Total time: 0 s, completed Oct 8, 2018 3:51:09 PM1. Waiting for source changes... (press enter to interrupt)[info] Compiling 1 Scala source to /home/gucci/jc-demo/scala/hello/target/scala-2.12/classes ...[info] Done compiling.[info] Packaging /home/gucci/jc-demo/scala/hello/target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT.jar ...[info] Done packaging.[info] Running example.Hello hello ShenZhen[success] Total time: 2 s, completed Oct 8, 2018 3:52:40 PM2. Waiting for source changes... (press enter to interrupt)

通过console的纯命令行

在sbt的命令行上输入console,会进入纯命令行模式,也称REPL,就是Read(取值)--> Evalution(求值)--> Print(打印)--> Loop(循环)。能会快速编译scala代码为字节码, 然后交给JVM来执行。

计算表达式

计算表达式: 在REPL内, 键入scala代码, 解释器会直接返回结果给你. 如果你没有指定变量来存放这个值, 那么值默认的名称为res, 而且会显示结果的数据类型, 比如Int, Double, java.lang.String等等.

例如:

sbt:Hello> console[info] Starting scala interpreter...Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).Type in expressions for evaluation. Or try :help.scala> 1+1res0: Int = 2

内置变量

内置变量: 在后面可以继续使用res这个变量, 以及它存放的值.

例如, 2.0 * res0, 返回res1: Double = 4.0
例如, "Hi, " + res0, 返回res2: java.lang.Stirng = Hi, 2

scala> 2.0 * res0res1: Double = 4.0scala> "Hi, " + res0res2: String = Hi, 2

自动补全

自动补全: 在REPL内, 可以使用tab键进行自动补全.

例如, 输入res2.to, 敲击Tab键, 解释器会显示一下选项, toCharArray, toLowerCase, toString, toUpperCase. 因为此时无法判定你需要补全的是哪一个, 因此提供给你所有的选项.
例如, 输入res2.toU, 敲击Tab键, 直接会给你补全为res2.toUpperCase

scala> res2.toto        toBoolean   toByte        toDouble   toIndexedSeq   toIterable   toList   toLowerCase   toSeq   toShort    toString        toUpperCase   toArray   toBuffer    toCharArray   toFloat    toInt          toIterator   toLong   toMap         toSet   toStream   toTraversable   toVector       scala> res2.toUpperCaseres3: String = HI, 2

输出hello ShenZhen

gucci@gucci-PC:~/jc-demo/scala/hello$ sbtPicked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp[info] Loading project definition from /home/gucci/jc-demo/scala/hello/project[info] Loading settings from build.sbt ...[info] Set current project to Hello (in build file:/home/gucci/jc-demo/scala/hello/)[info] sbt server started at local:///home/gucci/.sbt/1.0/server/0b234651a6ca6d6afea4/socksbt:Hello> console[info] Starting scala interpreter...Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).Type in expressions for evaluation. Or try :help.scala> print("hello ShenZhen")hello ShenZhenscala>

以上

学习语法的阶段,建议还是从第二种方法开始,因为第一种带了sbt工具使用,有点复杂,舍本求末了。

转载地址:http://oiwlo.baihongyu.com/

你可能感兴趣的文章
Gac代码库分析(3)智能指针
查看>>
如何做好技术串讲
查看>>
oracle的sql语句语法
查看>>
实例教程十三:拍照
查看>>
SCRIPT - to Tune the 'SESSION_CACHED_CURSORS' and 'OPEN_CURSORS' Parameters
查看>>
【转】MFC 字体LOGFONT
查看>>
iOS 图片填充 UIImageView
查看>>
spark2.3.0 配置spark sql 操作hive
查看>>
mysql常见错误解决方法
查看>>
【百度地图API】如何制作公交线路的搜索?如331路
查看>>
MusicXML 3.0 (30) - 和弦图表
查看>>
大话 char、varchar、 nchar、nvarchar之间"剪不断理还乱"的关系
查看>>
系统数据库
查看>>
JAVA: java产生随机数的几种方式
查看>>
调试发现的小错误
查看>>
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>
系统操作日志设计(转载)
查看>>
sqlldr 学习总结1
查看>>
剑指 offer set 17 判断一棵树是否是平衡树
查看>>
Leetcode: Path Sum II
查看>>