鍍金池/ 教程/ Scala/ Match 表達(dá)式
包對(duì)象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達(dá)式
類和對(duì)象 (三)
操作基本數(shù)據(jù)類型
for 表達(dá)式
組合和繼承–重載成員函數(shù)和方法
類和對(duì)象 (二)
組合和繼承–定義 factory 對(duì)象
組合和繼承–多態(tài)和動(dòng)態(tài)綁定
Trait 的基本概念
if 表達(dá)式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問控制修飾符
Trait 示例–Rectangular 對(duì)象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無參數(shù)方法
類和對(duì)象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
try 表達(dá)式處理異常
選擇瘦接口還是胖接口設(shè)計(jì)?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問控制修飾符添加作用域
Scala 的類層次關(guān)系
類和對(duì)象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進(jìn)一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實(shí)現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對(duì)象 (四)
函數(shù)–尾遞歸
沒有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復(fù)
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴(kuò)展類
函數(shù)–部分應(yīng)用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來實(shí)現(xiàn)可疊加的修改操作

Match 表達(dá)式

Scala 的 Match 表達(dá)式支持從多個(gè)選擇中選取其一,類似其它語言中的 switch 語句。通常來說,Scala 的 match 表達(dá)式支持任意的匹配模式,這種基本模式將在后面介紹,本篇介紹類似 switch 用法的 match 表達(dá)式,也是在多個(gè)選項(xiàng)中選擇其一。

例如下面的例子從參數(shù)中讀取食品的名稱,然后根據(jù)食品的名稱,打印出該和該食品搭配的食品,比如輸入 ”salt”,與之對(duì)應(yīng)的食品為”pepper”。如果是”chips”,那么搭配的就是“salsa”等等。

val firstArg = if (args.length >0 ) args(0) else ""
firstArg match {
  case "salt" => println("pepper")
  case "chips" => println("salsa")
  case "eggs" => println("bacon")
  case _ => println("huh?")
}

這段代碼和 Java 的 switch 相比有幾點(diǎn)不同:
一是任何類型的常量都可以用在 case 語句中,而不僅僅是 int 或是枚舉類型。
二是每個(gè) case 語句無需使用 break,Scala不支持“fall through”。
三是 Scala 的缺省匹配為”_”,其作用類似 java 中的 default。

而最關(guān)鍵的一點(diǎn)是 scala 的 match 表達(dá)式有返回值,上面的代碼使用的是 println 打印,而實(shí)際上你可以使用表達(dá)式,比如修改上面的代碼如下:

val firstArg = if (args.length >0 ) args(0) else ""
val friend = firstArg match {
  case "salt" => "pepper" 
  case "chips" => "salsa" 
  case "eggs" => "bacon" 
  case _ => "huh?" 
}

這段代碼和前面的代碼是等效的,不同的是后面這段代碼 match 表達(dá)式返回結(jié)果。