Scala基础
Twitter提供的 Scala School
变量
定义不可变量:val, val类似于Java中的final变量。与之对应的var类似于Java中的非final变量。Scala自带类型推断(type inference),
scala> val a = 2
a: Int = 2
scala> var b = 3
b: Int = 3
scala> val str:String = "Hello World";
str: String = Hello World
scala> println(str);
Hello World
函数
Scala 中的Unit类型类似于 Java 中 void 类型。而且实际上 Java 里 每一个返回 void 的方法都被映射为 Scala 里返回 Unit 的方法。
List和Tuple
Scala中的scala.List和Java中的java.util.List类是不一样,Scala中的List总是不可变的。(而 Java 的 List 可变 )。
Scala中,::
是右操作数,1::twoThree
是被twoThree调用,传入1。而类似*
这样的是左操作数,a*b
<=> a.*(b)
val twoThree = List(2, 3)
val oneTwoThree = 1 :: twoThree
//1 :: twoThree <=等价于=> twoThree.::(1)
val oneTwoThreeEquivalence = twoThree.::(1)
val pair = (99, "Luftballons")
println(pair._1)
println(pair._2)
Tuple和List一样,也是不可变的。针对一个元组(99, "Luftballons")
,Scala推断元组类型为Tuple2[Int, String]。数据下标从1开始。
Set和Map
Scala中的trait
类似于Java中的Interface
。(尽管 Java 里面称为“实现”了接口,在 Scala 里面称为“扩展”或“混入”了特质。) Scala中的Set就有两种不同特质的实现:可变集和不可变集。
Scala 编译器推断 jetSet 的类型为不可变 Set[String]
。因为不可变Set
,每次+=
都会产生一个新的 Set
,所以jetSet
无法用val
修饰。
var jetSet = Set("Boeing", "Airbus")
jetSet += "Lear"
println(jetSet.contains("Cessna"))
如果想使用可变集,引入scala.collection.mutable
即可。因为可变Set
的+=
,是在原Set
的基础上添加元素,所以可以用 val
修饰。
import scala.collection.mutable.Set
val movieSet = Set("Hitch", "Poltergeist")
movieSet += "Shrek"
println(movieSet)
Scala中的Map
和Set
类似,提供了可变Map
和不可变Map
两种。
val romanNumeral = Map(
1 -> "I", 2 -> "II", 3 -> "III", 4 -> "IV", 5 -> "V"
)
println(romanNumeral(4))
import scala.collection.mutable.Map
val treasureMap = Map[Int, String]()
treasureMap += (1 -> "Go to island.")
treasureMap += (2 -> "Find big X on ground.")
treasureMap += (3 -> "Dig.")