Scala学习笔记之模式匹配


Scala学习笔记之模式匹配

本文学习内容来自《Scala编程思想》第二版,谨以记录Scala学习历程,为避免侵权,不会大量使用书中文字和代码,如果读者想认真学习,可自行购买书籍。

Scala 模式匹配 (pattern matching)基于是否匹配某项条件来执行相应动作。类似于Java的switch,但更强大。

匹配表达式 会将一个值与可能的选项进行匹配。示例代码如下所示:

def matchDayOfWeek(day:Int):String = {
day match {
case 1 => "Monday"
case 2 => "Tuesday"
case 3 => "Wednesday"
case 4 => "Thursday"
case 5 => "Friday"
case 6 => "Saturday"
case 7 => "Sunday"
case _ => "Are you kidding?"
}
}

要比较的值(这里是day)开头,关键字match随后,然后是花括号包起来的组合表达式,每种可能都以关键字case开头,后面是目标值,如果匹配,=>(“火箭”)右边的表达式即该match的结果。

_ (下划线)在这里代表通配符,即任意值,在上面代码里,除了1~7之外的整数会匹配到下划线。注意,它通常是放在匹配列表的最后。如果没有使用通配符,那么当你试图匹配1~7之外的值时会产生错误(scala.MatchError)。另外,如果通配符放在其他位置,你会得到一个警告(warning: unreachable code),并且之后的匹配条件将失效,因为通配符代表任意值,scala先找到它就认为完成匹配了。

上面描述的是匹配表达式,即匹配目标值是表达式的情况。Scala还支持基于类型的模式匹配,即匹配类型。示例代码如下:

def matchAnything(x:Any):String = {
x match {
case s:String => "A String: " + s
case i:Int if(i<20) => s"An Int less than 20: $i"
case i:Int => "An Int greater than 20: " + i
case _ => "Unknown type."
}
}

这里的参数类型Any代表任何类型。这里的通配符_用来匹配任何类型。

s”An Int less than 20: $i”

这种表达式叫作字符串插值,就是将格式化的值插入字符串。

case i:Int if(i<20) => s”An Int less than 20: $i”

这里if测试对该类型的匹配进行了限制


智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
China Scenic Area
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告