【Scala-模式匹配和样例类】

14.2 scala默认首字母大写的字符串为常量,首字母小写的字符串为变量,如果希望在模式匹配中用首字母小写的常量需要用反引号 ` 进行标注

scala> val ch = 3.14
scala> val mypi = 3.14
scala> val res = ch match {
     | case `mypi` => true
     | case _ => false
     | }
res: Boolean = true

14.3类型模式:

scala> def GetInt(x:Any):Int = {
             x match {
                        case i:Int => i
                        case s:String => Integer.parseInt(s.trim)
                        case z:scala.math.BigInt => Int.MaxValue
                        case c:Char => c.toInt
                        case _ => 0
                        }
             }
GetInt: (x: Any)Int

14.4守卫:

scala> val ch = 3.14
scala> ch match {
     | case x if(x>3&&x<4) => true
     | case _ => false
     | }
res9: Boolean = true

14.5匹配数组,列表和元组

定义模式匹配函数matchArr:
scala> def matchArr(x:Array[Int]):String =
     | x match {
     | case Array(0) => "Only 0" //仅含一个元素0的数字
     | case Array(x,y) => x+" "+y  //仅含有两个元素的数组
     | case Array(0,_*) => "Strat from 0"  //0开始的数组
     | case _=> "Something else"
     | }
// matchArr: (x: Array[Int])String

scala> matchArr(Array(0))
// res21: String = Only 0
scala> matchArr(Array(0 to 20).flatten)
// res23: String = Strat from 0

14.6提取器:
scala> val pattern = "([0-9]+) ([a-z]+)".r
pattern: scala.util.matching.Regex = ([0-9]+) ([a-z]+)
scala> "99 bottles" match {
     | case pattern(num,item) => println("num => "+num +" item => " + item)
     | case _ =>
     | }
num => 99 item => bottles

14.7变量声明中的模式

scala> val (x,y) = BigInt(10) /% 3
x: scala.math.BigInt = 3
y: scala.math.BigInt = 1
/% 方法返回包含商和余数的对偶,而这两个值分别被变量x和y捕获

同理也可以用于任何有变量的模式
scala> val Array(first,second,_*) = arr.flatten
first: Int = 0
second: Int = 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值