没有基本类型,都是对象。
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(_ + _) // 第一个“_”表示匿名函数的第一个参数,第二个“_”表示第二个参数