本文共 1145 字,大约阅读时间需要 3 分钟。
Martin Odersky向Bill Venners和Frank Sommers谈论Scala模式匹配的机制和目的。
\\Scala是一种新兴的通用用途、类型安全的Java平台语言,结合了面向对象和函数式编程。它是洛桑联邦理工大学教授Martin Odersky的心血结晶。本访谈系列由多部分组成,由Artima网站的Frank Sommers和Bill Venners向Martin Odersky讨教Scala。在第一部分中(),Odersky讲述了导致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 + \
转载地址:http://cwwzx.baihongyu.com/