官术网_书友最值得收藏!

7.5 match表達式

Scala的match表達式允許你從若干可選值alternative)中選擇,就像其他語言中的switch語句那樣。一般而言,match表達式允許你用任意的模式pattern)來選擇(參見第13章)。拋開一般的形式不談,目前我們只需要知道使用match可以從多個可選值中進行選擇即可。

我們來看一個例子,示例7.14中的腳本從參數列表中讀取食物名稱并打印這個食物的搭配食材。這個match表達式首先檢查firstArg,這個變量對應的是參數列表中的首個參數。如果是字符串"salt",則打印"pepper";如果是字符串"chips",則打印"salsa";則此類推。默認的樣例以下畫線(_)表示,這個通配符在Scala中經常被用來表示某個完全不知道的值。

示例7.14 帶有副作用的match表達式

Scala的match表達式與Java的switch相比,有一些重要的區別。其中一個區別是任何常量、字符串等都可以被用作樣例,而不僅限于Java的case語句支持的整型、枚舉和字符串常量。在示例7.14中,可選值是字符串。另一個區別是在每個可選值的最后并沒有break。在Scala中,break是隱含的,并不會出現某個可選值執行完成后繼續執行下一個可選值的情況。這通常是我們預期的(不直通到下一個可選值),代碼因此變得更短,也避免了一類代碼錯誤,使得程序員不會再不小心直通到下一個可選值了。

不過Scala的match表達式與Java的switch語句相比最顯著的不同在于,match表達式會返回值。在示例7.14中,match表達式的每個可選值都打印出一個值。如果我們將打印語句換成交出某個值,則相應的代碼依然能工作,如示例7.15所示。從這個match表達式得到的結果被保存在friend變量中。這樣的代碼不僅更短(至少字數更少了),它還將兩件不同的事情解耦了:首先選擇食物,然后將食物打印出來。

示例7.15 交出值的match表達式

主站蜘蛛池模板: 白水县| 班戈县| 阳朔县| 河源市| 景泰县| 通道| 上饶县| 桦甸市| 新泰市| 抚远县| 西贡区| 绥宁县| 同江市| 龙南县| 益阳市| 伊通| 梅州市| 宜阳县| 黎平县| 邯郸县| 额济纳旗| 盐亭县| 绵竹市| 永川市| 银川市| 贺兰县| 南华县| 天柱县| 婺源县| 南阳市| 同江市| 宁夏| 迭部县| 民乐县| 望城县| 丹巴县| 胶南市| 海城市| 柳河县| 甘德县| 新津县|