1. REPL
REPL : 读取 ==> 求值 ==> 打印 ⇒ 循环
Scala解释器从技术上讲并不是一个解释器,实际情况是你输入的内容被快速地翻译成字节码,然后字节码交给Java虚拟机执行,更倾向于称Scala解释器为REPL。
2. 变量
val:声明常量
var:声明变量
使用val或者var时需要初始化。
val a = 8 * 2 // val是常量
var b = 12 // var是变量,可更改
b = 11
val x, y = 100 // x y都为100
不指定类型,Scala会自动推断;也可以自己指定类型(变量或函数的类型总是写在变量或函数的后面)。
val s: String = "hello,world"
val s = "hello, world"
val s: Any = "hello,world"
同一行代码中含有多条语句时才需要分号隔开。
注释同C++语言一样:
// 注释1
/**
* 注释2
*/
3. 数据类型
Scala有7种数值类型:Byte, Char, Short, Int, Long, Float, Double
1个布尔类型:Boolean
还有RichInt, RichDouble, RichChar, BigInt(java.math.BigInteger), BidDecimal
这些类型都是类,Scala不刻意区分基本类型和引用类型
1.toString() // 转字符串
1.to(5) // Range(1,2,3,4,5)
“hello”.intersect(“world”) // 输出 “lo"
Scala用底层的java.lang.String类表示字符串,但scala通过StringOps类给字符串追加了上百种操作。
Scala中,用方法而不是强制类型转换,来做数值类型之间的转换。
4. 算术和操作符重载
操作符实际上都是方法,+ - * / % & | ^ >> <<
val a = 1
val b = 2
a + b
a.+(b)
var count = 1
count += 1
5. 调用函数和方法
import scala.math._ // scala中 _ 是通配符,类似*
sqrt(2)
pow(2, 4)
min(3, Pi)
Scala没有静态方法,不过它有个类似的特性,叫做单例对象。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象。
通常一个类对应有一个伴生对象,其方法就跟java的静态方法一样。
不带参数的Scala方法通常不用圆括号。
6. apply方法
"hello"(4) // 输出o
// "hello"(4) 是 "hello".apply(4) 的简写
Array(1,4,9,17) // Array伴生对象的apply方法