Scala编程(第4版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.5 match表达式

Scala的match表达式让你从若干可选项alternative)中选择,就像其他语言中的switch语句那样。一般而言,match表达式让你用任意的模式pattern)来选择(参见第15章)。抛开一般的形式不谈,目前我们只需要知道可以用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表达式会返回值。在前一例中,match表达式的每个可选项都打印出一个值。如果将打印语句换成交出某个值,相应的代码依然能工作,如示例7.15所示。从这个match表达式得到的结果被保存在变量friend中。这样的代码不仅更短(至少字数更少了),它还将两件不同的事情解耦了:首先选择食物,然后再将食物打印出来。

示例7.15 交出值的match表达式