网站首页 > 基础教程 正文
?今天带大家一起过一遍scala语言的基础知识,涵盖变量声明、基本数据类型、Range使用和文件读取。
val变量与var变量
Scala有两种类型的变量,一种是val,是不可变的,在声明时就必须被初始化,而且初始化以后就不能再赋值;另一种是var,是可变的,声明的时候需要进行初始化,初始化以后还可以再次对其赋值。
val变量
1scala> val myStr = "Hello World!"
2myStr: String = Hello World!
上面第1行代码是我们输入的代码,敲入回车后,Scala解释器会解析我们输入的代码,然后返回执行结果,第2行就是Scala解释器执行后返回的结果,从中我们可以看到,myStr变量的类型是String类型,变量的值是Hello World! 这里需要注意的是,尽管我们在第1行代码的声明中,没有给出myStr是String类型,但是,Scala具有“类型推断”能力,可以自动推断出变量的类型。
当然,我们也可以显式声明变量的类型:
1cala> val myStr2 : String = "Hello World!"
2myStr2: String = Hello World!
上面已经声明了一个String类型的不可变的变量,下面我们可以使用该变量,比如要打印出来:
1scala> println(myStr)
2Hello World!
上面的第1行代码是我们在scala命令提示符后面输入的代码,第2行是执行结果。因为myStr是val变量,因此,一旦初始化以后,就不能再次赋值,所以,下面我们执行的再次赋值操作会报错:
1scala> myStr = "Hello Scala!"
2<console>:27: error: reassignment to val
3 myStr = "Hello Scala!"
4 ^
var变量
如果一些变量,需要在初始化以后还要不断修改它的值(比如商品价格),则需要声明为var变量。
下面我们把myPrice声明为var变量,并且在声明的时候需要进行初始化:
1scala> var myPrice : Double = 9.9
2myPrice: Double = 9.9然后,我们可以再次对myPrice进行赋值:
1scala> myPrice = 10.6
2myPrice: Double = 10.6
基本数据类型
Scala的数据类型包括:Byte、Char、Short、Int、Long、Float、Double和Boolean。和Java不同的是,在Scala中,这些类型都是“类”,并且都是包scala的成员,比如,Int的全名是scala.Int。对于字符串,Scala用java.lang.String类来表示字符串。
这里要明确什么是“字面量”?字面量包括整数字面量、浮点数字面量、布尔型字面量、字符字面量、字符串字面量、符号字面量、函数字面量和元组字面量。举例如下:
1val i = 123 //123就是整数字面量
2val i = 3.14 //3.14就是浮点数字面量
3val i = true //true就是布尔型字面量
4val i = 'A' //'A'就是字符字面量
5val i = "Hello" //"Hello"就是字符串字面量
Scala允许对“字面量”直接执行方法,比如:
15.toString() //产生字符串"5"
2"abc".intersect("bcd") //输出"bc"
上面的intersect()方法用来输出两个字符串中都存在的字符。
操作符
在Scala中,可以使用加(+)、减(-) 、乘(*) 、除(/) 、余数(%)等操作符,而且,这些操作符就是方法。例如,5 + 3和(5).+(3)是等价的,也就是说:a 方法 b 和a.方法(b)这二者是等价的。前者是后者的简写形式,这里的+是方法名,是Int类中的一个方法。具体代码如下:
1scala> val sum1 = 5 + 3 //实际上调用了 (5).+(3)
2sum1: Int = 8
3scala> val sum2 = (5).+(3) //可以发现,写成方法调用的形式,和上面得到相同的结果
4sum2: Int = 8
scala:Range
在执行for循环时,我们经常会用到数值序列,比如,i的值从1循环到5,这时就可以采用Range来实现。Range可以支持创建不同数据类型的数值序列,包括Int、Long、Float、Double、Char、BigInt和BigDecimal等。
在创建Range时,需要给出区间的起点和终点以及步长(默认步长为1)。下面通过几个实例来介绍:
(1)创建一个从1到5的数值序列,包含区间终点5,步长为1
1scala> 1 to 5
2res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
(2)创建一个从1到5的数值序列,不包含区间终点5,步长为1
1scala> 1 until 5
2res1: scala.collection.immutable.Range = Range(1, 2, 3, 4)
(3)创建一个从1到10的数值序列,包含区间终点10,步长为2
1scala> 1 to 10 by 2
2res2: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
(4)创建一个Float类型的数值序列,从0.5f到5.9f,步长为0.8f
1scala> 0.5f to 5.9f by 0.8f
2res3: scala.collection.immutable.NumericRange[Float] = NumericRange(0.5, 1.3, 2.1, 2.8999999, 3.6999998, 4.5, 5.3)
读写文件
Scala需要使用java.io.PrintWriter实现把数据写入到文本文件。
假设当前正使用用户名hadoop登录Linux系统,打开Scala解释器进入命令提示符状态后,输入以下代码:
1scala> import java.io.PrintWriter
2import java.io.PrintWriter //这行是Scala解释器执行上面语句后返回的结果
3scala> val out = new PrintWriter("output.txt")
4out: java.io.PrintWriter = java.io.PrintWriter@25641d39 //这行是Scala解释器执行上面语句后返回的结果
5scala> for (i <- 1 to 5) out.println(i)
6scala> out.close()
上面代码中,new PrintWriter(“output.txt”)中只给出了文件名,并没有给出文件路径,采用相对路径,这时,文件就会被保存到启动Scala REPL时的当前目录下
读取文本文件的行
可以使用Scala.io.Source的getLines方法实现对文件中所有行的读取。
仍然假设当前是用hadoop用户登录了Linux系统,并且使用scala命令启动了Scala解释器,现在,我们要把上面刚生成的、在hadoop用户工作目录下的output.txt文件读取出来,下面给出了完整的读取文件实例代码:
1scala> import scala.io.Source
2import scala.io.Source //这行是Scala解释器执行上面语句后返回的结果
3scala> val inputFile = Source.fromFile("output.txt")
4inputFile: scala.io.BufferedSource = non-empty iterator //这行是Scala解释器执行上面语句后返回的结果
5scala> val lines = inputFile.getLines //返回的结果是一个迭代器
6lines: Iterator[String] = non-empty iterator //这行是Scala解释器执行上面语句后返回的结果
7scala> for (line <- lines) println(line)
8 1
9 2
10 3
11 4
12 5
参考链接:
http://dblab.xmu.edu.cn/blog/spark/
https://www.runoob.com/scala/scala-tutorial.html
猜你喜欢
- 2024-10-12 Scala初学者入门指南!涵盖20多个基本技巧
- 2024-10-12 Scala循环性能问题,为了性能,你愿意牺牲代码的可维护性么?
- 2024-10-12 使用Apache Kafka时的7个错误 apache kafka实战pdf
- 2024-10-12 scala中为什么不建议用return scala for until
- 2024-10-12 scala——泛型方法、类、特质的使用,泛型边界、协变逆变非变
- 2024-10-12 程序员构建总是出问题,怎么办? 程序员构建总是出问题,怎么办呢
- 2024-10-12 scala——列表、元祖、列表相关知识
- 2024-10-12 scala语言基础图解-第一阶段(变量-条件-循环-方法-函数-集合)
- 2024-10-12 Scala入门视频已更新至88讲,后续还有大约20讲左右的视频就结束
- 2024-10-12 Scala快速入门 - 环境安装篇 scala安装步骤
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)