(TOC)
<人力资源/>
可以用到开关语句
1, Scala强大的模式匹配机制,可以应用在开关语句,类型检查以及“析构”等场合。
<代码> def swithOps:单元={ var=0标志 val ch: Char=' + ' ch匹配{ ' + '=比;标志=1 ','=比;标志=1 _=比;符号=0 } println(“标志===比;“+签名) }代码>
上面代码中,案例_模式对应于开关语句中的违约,能够捕获剩余的情况。如果没有模式能匹配,会抛出MatchError。而且不像常见的开关语句,在一种模式匹配之后,需要使用分手来声明分支不会进入下一个分支,在scala中并不需要这种打破语句。
2,匹配是表达式,不是语句,所以是有返回值的,故可将代码简化:
<代码>=ch匹配{迹象 ' + '=比;1 ','=比;1 _=比;0 } println(“标志=====比;代码”+签名)>
可以查看下面的完整测试案例:
cn.xpleaf.bigdata.p5.cm<代码>包/* * * scala中的模式匹配 *错误:找不到或无法加载主类cn.xpleaf.bigdata.p5. .CaseOps“案例” * *这里的问题出在将关键字作为类名中的一部分 *所以今后的书写过程中尽量不要将关键字作为类名或者包名 */对象CaseOps { def主要(args:数组[String]):单位={ caseOps2 }/* * * scala中的任何表达式都是有返回值的,模式匹配也不例外,我们可以直接获取对应的返回值进行操作 *如果不写情况_的操作,匹配不上的话,会抛出相关异常:scala.MatchError */def caseOps2:单位={ val ch=' 1 ' val标志={ch匹配 ' + '=比;1 ','=比;0//case _=比;2 } println(签名) }/* * *一般情况下也就是将模式匹配当java中做的切换实例来进行使用 */def caseOps1:单位={ val ch=' 1 ' var标志=1 ch匹配{ ' + '=比;标志=1 ','=比;符号=0 _=比;符号=2 } println(签名) } }代码>
输出结果如下:
<代码> 2 代码>
守卫
与如果表达式的守卫相同作用,测试案例如下:
<代码>对象CaseOps { def主要(args:数组[String]):单位={ caseOps3 }/* * *匹配模式匹配当做守卫进行使用 */def caseOps3:单位={ val ch: Char=' a ' var标志=1 ch匹配{ ' + '=比;标志=1 ','=比;标志=1 _如果Character.isDigit (ch)=比;符号=2 _如果Character.isAlphabetic (ch)=比;符号=3 _=比;符号=2 } println("标志=" +签名) } }代码>
输出结果如下:
<代码>标志=3 代码>
模式中的变量
如果在案件关键字后跟着一个变量名,那么匹配的表达式会被赋值给那个变量。<代码> _ 代码>是案例这个特性的一个特殊情况,变量名是<代码> _ 代码>。
测试案例如下:
<代码>对象CaseOps { def主要(args:数组[String]):单位={ caseOps4 }/* * *将要进行匹配的值,赋值给案件后面的变量,我们可以对变量进行各种操作 */def caseOps4:单位={ “你好,wordl”foreach (c=比;println ( c{匹配 ' '=比;“空间” ch=比;”字符:“+ ch } )) } }代码>
输出结果如下:
<代码>字符:H 字符:e 字符:l 字符:l 字符:阿 字符: 空间 字符:w 字符:阿 字符:r 字符:d 字符:l 代码>
类型模式
相比使用isInstanceOf来判断类型,使用模式匹配更好。
<代码>对象CaseOps { def主要(args:数组[String]):单位={ caseOps5 }/* * *使用模式匹配可以代替isInstanceOf和asInstanceOf来进行使用 */def caseOps5:单位={ def typeOps (x:任何):Int={ val {=x比赛结果 我:Int=比;我 案例:字符串=比;Integer.parseInt (s) z: scala.math。长整型数字=比;Int.MaxValue 案例c: Char=比;c.toInt _=比;0 } 结果 } println (typeOps (" 12345 ")==12345) } }代码>
输出结果如下:
<代码>对代码>
匹配数组,列表和元组
测试代码如下:
<代码>对象CaseOps { def主要(args:数组[String]):单位={ caseOps6 }/* * scala数*匹配组 */def caseOps6:单位={ val arr=阵列(0,1) {arr匹配//匹配只有一个元素的数组,且元素就是0 数组(0)=比;println (“0”)//匹配任何带有两个元素的数组,并将元素绑定到x和y 情况下阵列(x, y)=比;println (x + " " + y)//匹配任何以0开始的数组 情况下阵列(0,_ *)=比;println (“0…”) _=比;println(“其他东西”) } } }Scala笔记整理(七):模式匹配和样例类