==> Scala 有一个强大的模式匹配机制, 类似于 switch 语句,可以实现对类型的判断以及检查,还提供了样本类,使其可以对样本类的对象进行模式匹配
==> 模式匹配示例
<code>var</code> <code>v</code><code>1</code> <code>=</code> <code>0</code>
<code>var</code> <code>ch</code><code>1</code> <code>=</code> <code>"-"</code>
<code>ch</code><code>1</code> <code>match</code><code>{</code>
<code> </code><code>case</code> <code>"+"</code> <code>=</code><code>> v</code><code>1</code> <code>=</code> <code>1</code>
<code> </code><code>case</code> <code>"-"</code> <code>=</code><code>> v</code><code>1</code> <code>=</code> <code>-</code><code>1</code>
<code> </code><code>case</code> <code>_</code> <code>=</code><code>> v</code><code>1</code> <code>=</code> <code>0</code>
<code>}</code>
<code>println(v</code><code>1</code><code>)</code>
==> Scala 守卫
<code>// Scala 守卫 匹配某种类型的所有值</code>
<code>var</code> <code>v</code><code>2</code> <code>=</code> <code>'6'</code>
<code>var</code> <code>ch</code><code>2</code><code>:</code><code>Int </code><code>=</code> <code>-</code><code>1</code>
<code>v</code><code>2</code> <code>match</code><code>{</code>
<code> </code><code>case</code> <code>'+'</code> <code>=</code><code>> println(</code><code>"这是一个+"</code><code>)</code>
<code> </code><code>case</code> <code>'-'</code> <code>=</code><code>> println(</code><code>"这是一个 -"</code><code>)</code>
<code> </code><code>case</code> <code>_</code> <code>if</code> <code>Character.isDigit(v</code><code>2</code><code>) </code><code>=</code><code>> ch</code><code>2</code> <code>=</code> <code>Character.digit(ch</code><code>2</code><code>, </code><code>10</code><code>)</code>
<code> </code><code>case</code> <code>_</code> <code>=</code><code>> println(</code><code>"其它类型"</code><code>)</code>
<code>println(</code><code>"ch2:"</code> <code>+ ch</code><code>2</code><code>)</code>
==> 模式匹配中的变量
<code>// 模式中匹配变量</code>
<code>var</code> <code>v</code><code>3</code> <code>=</code> <code>"Hello"</code>
<code>v</code><code>3</code><code>(</code><code>1</code><code>) </code><code>match</code><code>{</code>
<code> </code><code>case</code> <code>'+'</code> <code>=</code><code>> println(</code><code>"这是一个 + "</code><code>)</code>
<code> </code><code>case</code> <code>ch </code><code>=</code><code>> println(</code><code>"这是"</code> <code>+ ch)</code>
==> 模式匹配中的数组和列表
<code>// 匹配数组和列表</code>
<code>var</code> <code>myarray </code><code>=</code> <code>Array(</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>)</code>
<code>myarray </code><code>match</code> <code>{</code>
<code> </code><code>case</code> <code>Array(</code><code>0</code><code>) </code><code>=</code><code>> println(</code><code>"0"</code><code>)</code>
<code> </code><code>case</code> <code>Array(x, y) </code><code>=</code><code>> println(</code><code>"这是列表,包含两个元素,和是: "</code> <code>+ (x+y))</code>
<code> </code><code>case</code> <code>Array(x, y, z) </code><code>=</code><code>> println(</code><code>"包含三个元素,乘积是: "</code> <code>+ (x*y*z))</code>
<code> </code><code>case</code> <code>Array(x, </code><code>_</code><code>*) </code><code>=</code><code>> println(</code><code>"这是一个数组"</code><code>)</code>
<code>var</code> <code>mylist </code><code>=</code> <code>List(</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>)</code>
<code>mylist </code><code>match</code><code>{</code>
<code> </code><code>case</code> <code>List(</code><code>0</code><code>) </code><code>=</code><code>> println(</code><code>"0"</code><code>)</code>
<code> </code><code>case</code> <code>List(x, y) </code><code>=</code><code>> println(</code><code>"这是两个元素,乘积是:"</code> <code>+ (x+y))</code>
<code> </code><code>case</code> <code>List(x, y, z) </code><code>=</code><code>> println(</code><code>"这是一个三个元素的数组,乘积是: "</code> <code>+ (x*y*z))</code>
<code> </code><code>case</code> <code>List(</code><code>_</code><code>*) </code><code>=</code><code>> println(</code><code>"这是一个多元素数组"</code><code>)</code>
==> 样本类(CaseClass) 在类前面加 case 关键字, 其最大的好处就是 支持模式识别
<code>// 通过使用样本类判断对象是否属于类</code>
<code>var</code> <code>aCar</code><code>:</code><code>DemoCaseClass </code><code>=</code> <code>new</code> <code>Bicycle(</code><code>"car"</code><code>)</code>
<code>aCar </code><code>match</code><code>{</code>
<code> </code><code>case</code> <code>Car(name) </code><code>=</code><code>> println(</code><code>"I am a car"</code><code>)</code>
<code> </code><code>case</code> <code>Bicycle(name)</code><code>=</code><code>> println(</code><code>"i am a zixingche|"</code><code>)</code>
<code> </code><code>case</code> <code>_</code> <code>=</code><code>> println(</code><code>"other"</code><code>)</code>
<code>class</code> <code>DemoCaseClass</code>
<code>case</code> <code>class</code> <code>Car(name</code><code>:</code><code>String) </code><code>extends</code> <code>DemoCaseClass</code>
<code>case</code> <code>class</code> <code>Bicycle(name</code><code>:</code><code>String) </code><code>extends</code> <code>DemoCaseClass</code>
本文转自 菜鸟的征程 51CTO博客,原文链接:http://blog.51cto.com/songqinglong/2072119