天天看点

Scala 语言之模式匹配(6)

==> 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>&gt; v</code><code>1</code> <code>=</code> <code>1</code>

<code>  </code><code>case</code> <code>"-"</code> <code>=</code><code>&gt; v</code><code>1</code> <code>=</code> <code>-</code><code>1</code>

<code>  </code><code>case</code> <code>_</code> <code>=</code><code>&gt; v</code><code>1</code> <code>=</code> <code>0</code>

<code>}</code>

<code>println(v</code><code>1</code><code>)</code>

==&gt; 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>&gt; println(</code><code>"这是一个+"</code><code>)</code>

<code>  </code><code>case</code> <code>'-'</code> <code>=</code><code>&gt; 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>&gt; 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>&gt; println(</code><code>"其它类型"</code><code>)</code>

<code>println(</code><code>"ch2:"</code> <code>+ ch</code><code>2</code><code>)</code>

==&gt; 模式匹配中的变量

<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>&gt; println(</code><code>"这是一个 + "</code><code>)</code>

<code>  </code><code>case</code> <code>ch </code><code>=</code><code>&gt; println(</code><code>"这是"</code> <code>+ ch)</code>

==&gt; 模式匹配中的数组和列表

<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>&gt; println(</code><code>"0"</code><code>)</code>

<code>  </code><code>case</code> <code>Array(x, y) </code><code>=</code><code>&gt; println(</code><code>"这是列表,包含两个元素,和是: "</code> <code>+ (x+y))</code>

<code>  </code><code>case</code> <code>Array(x, y, z) </code><code>=</code><code>&gt; 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>&gt; 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>&gt; println(</code><code>"0"</code><code>)</code>

<code>  </code><code>case</code> <code>List(x, y) </code><code>=</code><code>&gt; println(</code><code>"这是两个元素,乘积是:"</code> <code>+ (x+y))</code>

<code>  </code><code>case</code> <code>List(x, y, z) </code><code>=</code><code>&gt; println(</code><code>"这是一个三个元素的数组,乘积是: "</code> <code>+ (x*y*z))</code>

<code>  </code><code>case</code> <code>List(</code><code>_</code><code>*) </code><code>=</code><code>&gt; println(</code><code>"这是一个多元素数组"</code><code>)</code>

==&gt; 样本类(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>&gt; println(</code><code>"I am a car"</code><code>)</code>

<code>  </code><code>case</code> <code>Bicycle(name)</code><code>=</code><code>&gt; println(</code><code>"i am a zixingche|"</code><code>)</code>

<code>  </code><code>case</code> <code>_</code> <code>=</code><code>&gt; 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