Scala语言速查

变量与值

val name: String = "Alice" // 不可变 var age: Int = 28 // 可变 val pi = 3.14 // 类型推断 lazy val heavy = compute() // 延迟求值

模式匹配

val result = value match { case 0 => "zero" case n if n < 0 => "negative" case n => s"positive: $n" } // 类型匹配 def describe(x: Any): String = x match { case i: Int => s"int: $i" case s: String => s"string: $s" case _ => "unknown" }

样例类和密封特质

// 样例类 — 自动 equals/hashCode/copy case class User(name: String, age: Int) val alice = User("Alice", 28) val older = alice.copy(age = 29) // 密封特质(代数数据类型) sealed trait Shape case class Circle(r: Double) extends Shape case class Rect(w: Double, h: Double) extends Shape def area(s: Shape): Double = s match { case Circle(r) => Math.PI * r * r case Rect(w, h) => w * h }

集合

val list = List(1, 2, 3, 4, 5) list.map(_ * 2) // List(2, 4, 6, 8, 10) list.filter(_ > 2) // List(3, 4, 5) list.foldLeft(0)(_ + _) // 15 list.groupBy(_ % 2) // Map(0 -> List(2,4), 1 -> List(1,3,5)) val map = Map("a" -> 1, "b" -> 2) map.getOrElse("c", 0) // 0 // for 推导式 val pairs = for { x <- List(1, 2, 3) y <- List("a", "b") } yield (x, y)

Option 和 Either

// Option — 避免 null val maybeUser: Option[User] = findUser(id) maybeUser.map(_.name).getOrElse("Guest") maybeUser.foreach(u => println(u.name)) // Either — 错误处理 def parse(s: String): Either[String, Int] = s.toIntOption.toRight(s"Not a number: $s") parse("42") // Right(42) parse("foo") // Left("Not a number: foo")