一、REPL

scala解释器读到一个表达式,对它进行求值,将它的打印出来,接着再继续读下一个表达式。这个过程被称作 读取-打印-循环,即REPL。

从技术上讲,scala程序并不是一个解释器。实际发生的是,你输入的内容被快速的编译成字节码,然后这段字节码交由java虚拟机执行。正因如此,大多数scala程序员更倾向将它称作REPL。

二、声明值

2.1val定义的值实际上是一个常量,你无法改变它的内容。

scala> val result = *
result: Int = scala> result =
<console>:: error: reassignment to val
result =
^

scala鼓励使用val

你需要给出值或者变量的类型,声明值或者变量但不做初始化会报错。

在必要的时候,你也可以指定类型

scala> val result = *
result: Int = scala> result =
<console>:: error: reassignment to val
result =
^

三、scala常用类型

3.1基本数据类型

scala和java中的数据类型一样有8种,但是在scala中并不刻意区分基本类型和引用类型。你可以对一个对数字执行方法,例如

scala> 1.toString()

res1: String = 1

在scala中我们不需要包装类型,在基本类型和包装类型之间的转换是scala编译器的工作。

BigInt和BigDecimal类,用于任意大小的数字。这些类背后分别对应的是java.math.BigInteger和java.math.BigDecimal。他们用起来更加方便,你可以用常规的数学操作符来操作他们。

3.2字符串类型

scala用底层的java.lang.String类来表示字符串。不过,他通过StringOps类给字符串追加了上百种操作。

intersect方法输出两个字符串共同的一组字符

scala> "hello".intersect("world")
res0: String = lo

在这个表达式中,String对象被隐式的转换为了StringOps对象,接着StringOps类的intersect方法被调用。

同样的scala还提供了RichInt、RichDouble、RichChar等。他们提供了Int,Double,Char所不具备的快捷方法。我们前面用到的1.toString就是RichInt类中的方法。首先1被转换成了RichInt,然后再应用头方法。

3.3类型转换

在scala中我们使用方法而不是强制类型转换。

scala> 99.44.toInt
res3: Int = scala> .toChar
res4: Char = c scala> "99.44".toDouble
res5: Double = 99.44
05-11 19:44