Scala:声明值和变量

大数据技术原理与应用

【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载!
[返回Spark教程首页]

Scala有两种类型的变量,一种是val,是不可变的,在声明时就必须被初始化,而且初始化以后就不能再赋值;另一种是var,是可变的,声明的时候需要进行初始化,初始化以后还可以再次对其赋值。

val变量

scala> val myStr = "Hello World!"
myStr: String = Hello World!

上面第1行代码是我们输入的代码,敲入回车后,Scala解释器会解析我们输入的代码,然后返回执行结果,第2行就是Scala解释器执行后返回的结果,从中我们可以看到,myStr变量的类型是String类型,变量的值是Hello World! 这里需要注意的是,尽管我们在第1行代码的声明中,没有给出myStr是String类型,但是,Scala具有“类型推断”能力,可以自动推断出变量的类型。

当然,我们也可以显式声明变量的类型:

scala> val myStr2 : String = "Hello World!"
myStr2: String = Hello World!

需要说明的是,上面的String类型全称是java.lang.String,也就是说,Scala的字符串是由Java的String类来实现的,因此,我们也可以使用java.lang.String来声明,具体如下:

scala> val myStr3 : java.lang.String = "Hello World!"
myStr3: String = Hello World!

但是,为什么可以不用java.lang.String,而只需要使用String就可以声明变量呢?这是因为,在每个应用程序中,Scala都会自动添加一些引用,这样,就相当于在每个程序源文件的顶端都增加了一行下面的代码:

import java.lang._ //java.lang包里面所有的东西

上面已经声明了一个String类型的不可变的变量,下面我们可以使用该变量,比如要打印出来:

scala> println(myStr)
Hello World!

上面的第1行代码是我们在scala命令提示符后面输入的代码,第2行是执行结果。

因为myStr是val变量,因此,一旦初始化以后,就不能再次赋值,所以,下面我们执行的再次赋值操作会报错:

scala> myStr = "Hello Scala!"
<console>:27: error: reassignment to val
          myStr = "Hello Scala!"
                          ^

var变量

如果一些变量,需要在初始化以后还要不断修改它的值(比如商品价格),则需要声明为var变量。
下面我们把myPrice声明为var变量,并且在声明的时候需要进行初始化:

scala> var myPrice : Double = 9.9
myPrice: Double = 9.9

然后,我们可以再次对myPrice进行赋值:

scala> myPrice = 10.6
myPrice: Double = 10.6

小技巧:如何在Scala解释器中输入多行代码

在Scala解释器中,当在命令提示符后面输入一个表达式并且按回车以后,代码就会被执行并显示出结果,比如下面我们输入一行表达式并回车:

scala> 2*9+4
res1: Int = 22

这是输入单行代码的情形,但是,有时候,我们需要在命令提示符后面输入多行代码,这该如何实现呢?怎么才能让Scala解释器意识到你要输入多行代码呢?
在Java中,每个语句都是以英文的分号结束,但是,在Scala中,可以不用分号。当然,如果你想把多条语句全部写在一行上面,这时还是需要使用分号来隔开各个语句的。
通常而言,只要Scala解释器推断出你的代码还没有结束,应该延续到下一行,解释器就会在下一行显示一个竖线“|”,你可以继续输入剩余的代码,比如,我们要输入表达式val myStr4 = "Hello World!",我们只在命令提示符后面输入“val myStr4 = ”然后就回车,显然,这个表达式还没有结束,所以,解释器会在下一行显示一个竖线“|”,你可以在第2行继续输入"Hello World!"然后回车,解释器就会得到执行结果,具体如下:

scala> val myStr4 =
       | "Hello World!"
myStr4: String = Hello World!

此外,如果我们在命令提示符后面输入“val myStr5 = ”然后就回车,解释器会在下一行显示一个竖线“|”,这时如果我们发现变量名称错误,想放弃本次输入,就可以在“|”后面连续敲入两个回车,结束本次输入,具体如下:

scala> val myStr5 =
       |
       |
You typed two blank lines. Starting a new command.
scala>

子雨大数据之Spark入门
扫一扫访问本博客