Scala 擁有豐富的符號運算子,許多在其他語言中罕見。本文彙整常見且易混淆的符號含義與用法,協助快速閱讀 Scala 程式碼。
| 符號 | 名稱/用途 | 範例 | 說明 |
|---|---|---|---|
::: | List 串接 | List(1,2) ::: List(3,4) | 回傳新 List List(1,2,3,4) |
:: | 元素前綴 | 1 :: List(2,3) | 回傳 List(1,2,3),右結合 |
_N | Tuple 存取 | val t = (1,"a"); t._1 | 索引從 1 開始,非 0 |
-> | 建立 Tuple2 | "a" -> 1 | 等同 ("a", 1) 或 Tuple2("a", 1) |
<- | for-comprehension 產生器 | for (x <- List(1,2)) yield x*2 | 遍歷集合、Option、Future 等 |
=> | 函數字面值/型別 | Int => String | 函數型別:輸入 Int 回傳 String |
() => T | 無參函數型別 | () => "hello" | 呼叫時不需參數,回傳 T |
Unit => | 副作用函數型別 | Unit => println("hi") | Unit 相當於 void |
_ | 通配符/佔位符 | case _ =>, _ + 1 | 模式匹配預設、匿名函數參數 |
_* | 序列展開 | f(xs: _*) | 將 Seq 作為可變參數傳遞 |
val one = List(1,2,3) val two = List(4,5,6) val three = one ::: two // List(1,2,3,4,5,6) val four = 0 :: one // List(0,1,2,3)
val t = ("Apple", 10, 3.14)
println(t._1) // Apple
println(t._2) // 10
val pair = "key" -> "value" // ("key", "value")
for (i <- 1 to 3; j <- 'a' to 'c') println(s"$i$j") // 1a 1b 1c 2a 2b 2c 3a 3b 3c
val f: Int => String = x => x.toString
val g: () => Int = () => 42
val h: Unit => Unit = _ => println("side effect")
def sum(xs: Int*) = xs.sum val list = List(1,2,3) sum(list: _*) // 6