没有基本类型,都是对象。

1.toString() //1是Int对象
1.to(10)

函数是first-class citizen。函数可以做为其它函数的参数、返回值等。

val f = (x:Int)=>x+1

风格偏脚本语言,更“DSL友好”。

1.toString //可以省略(),语句不需要“;”结尾
1 to 10    //和 1.to(10) 等效

像Ruby一样,大部分表达式都有值。 {}语句块的值是它包含的最后一句表达式的值。{}语句块有值也是定义Scala函数时不需要return语句的原因。

val s = if (x > 0) 1 else -1

强调不可变,immutable。

val a = 1 //变量a不可修改
var b = 2 //b可以被修改
val c = Map("foo"->42) //c的类型是scala.collection.immutable.Map,Scala优先使用immutable类型

可以重载操作符。

ages += ("Fred" -> 20)  //Map的插入操作
ages -= "Joshua"        //删除

更简洁,

class Person(age: Int) { // 会自动生成field,和它的getter和setter
}
highOrderFunc((x: Double) => 3 * x) 
highOrderFunc((x) => 3 * x)     // 匿名函数的参数类型可以从highOrderFunc的定义推导出来,可以省略
highOrderFunc(x => 3 * x)       // ()可以省略
highOrderFunc(3 * _)            // 可以用“_”指代参数

List(1, 2, 3).reduceLeft(_ + _) // 第一个“_”表示匿名函数的第一个参数,第二个“_”表示第二个参数