Scala模式匹配的亮点——Martin Odersky访谈(四)

Martin Odersky向Bill Venners和Frank Sommers谈论Scala模式匹配的机制和目的。

\\

Scala是一种新兴的通用用途、类型安全的Java平台语言,结合了面向对象和函数式编程。它是洛桑联邦理工大学教授Martin Odersky的心血结晶。本访谈系列由多部分组成,由Artima网站的Frank Sommers和Bill Venners向Martin Odersky讨教Scala。在第一部分Scala起源中(点击查看《Scala起源》中文翻译),Odersky讲述了导致Scala诞生的那些历史。在第二部分Scala的设计目标中,它讨论了Scala设计中的妥协、目标、创新和优势。在第三部分Scala类型系统的目的中,他挖掘了Scala的类型系统的设计动机。本期是第四部分,也是最后一部分,Odersky讨论了模式匹配。

\\

模式匹配是什么?

\\

Bill Venners: Scala支持模式匹配。这是一种函数式编程技术,过去尚未在主流语言中出现过。你能解释一下它是什么,以及我们为什么需要它?

\\

Martin Odersky: 模式匹配并不很新,(上世纪)七十年代中期就已经有语言采用。据我所知,第一种语言是ML,但可能也有更早的语言支持。它在许多函数式语言中都算是标准功能,包括ML、Caml、Erlang、以及Haskell。

\\

那么什么是模式匹配呢?它可以让你给一个值匹配多种情况,有点像Java中的switch语句。但它不仅可以像switch语句一样用来匹配数字,还可以匹配对象的内在构建形式。

\\

比如,Scala中的List存在两种情况:要么是空List,写做Nil;要么由一个head元素紧接着另一List tail组成。有了模式匹配,你可以询问:给定的List是空List吗?只要编写case Nil、箭头(=\u0026gt;)以及后续表达式即可:

\\
\case Nil =\u0026gt; // 后续表达式
\\

你还可以询问:它是非空List吗?只要编写case x :: xs、箭头、以及后续表达式即可:

\\
\case x :: xs =\u0026gt; // 后续表达式
\\

双冒号(::)表示cons操作符;x表示List的首元素,xs表示剩余部分。于是,模式匹配会首先区分List是否为空。而如果List空,它会把List的首元素命名为x然后把List剩余部分命名为xs。接下来,这些变量可以被箭头右侧表达式所用。(参见示例1)

\\

示例1:match表达式

\\
\list match {\  case Nil =\u0026gt; \"was an empty list\"\  case x :: xs =\u0026gt; \"head was \" + x + \
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值