scala-模式匹配
option模式匹配:
var map1=Map("abc"->5,"eee"->6)
var x=map1.get("abc")
x match {
case Some(x) => println("Some用来判断值存在"+x)
case None => println("None用来表示值不存在")
}
case class 模式匹配 :
class A
case class A1(name:String,age:Int) extends A
case class A2(name:String,address:String) extends A def classMatch(c:A){
c match {
case A1(name,age) => println("类型是A1")
case A2(name,address) => println("类型是A2")
case _ => println("类型未知")
}
}
list列表匹配(Nil代表结束,tail代表未知的后续元素):
def listMatch(list:Any)={
list match {
case e1::e2::Nil => println("list仅有2个元素:"+e1+e2)
case "abc"::"678"::"mmm"::Nil => println("list仅仅包含3个固定元素")
case 0::tail => println("list以0开头包含"+(list.asInstanceOf[List[Int]]).length+"个元素")
case 0::Nil => println("这个list仅仅包含0")
case _ => println("没有匹配")
}
}
数组模式匹配:
def arrayMatch(arr:Any)={
arr match {
case Array("abc") => println("only one abc")
case Array("abc",1) => println("两个元素:abc和1")
case Array(a,b) => println("两个动态元素:"+a+"-"+b)
case Array(0,_*) => println("这个array以0开头元素个数不计:"+arr)
case _ => println("没有匹配")
}
}
类型模式匹配:
//传入的参数,但判断类型时实际使用的是isInstanceOf[xxx]
def getNum(item:Any)={
item match{
case x:String => print("String")
case i:Int => print("Int")
case c:Char => print("Char")
case _=>0//这个是完全没有匹配上的情况
}
}
值匹配:
def testMatch(i:Int,s:String="default"):Unit={
i match {
case 1 => print("数字:"+1)
case 2 => print("数字:"+2)
case 3 => print("数字:"+3)
case 5 if(s equals "mz") => print("数字:"+3+"mz")//匹配后仍可添加判断
case tmp1 => print("tmp1的赋值数字:"+tmp1)//会将i赋值给tmp1变量
case _ => print("其它喽")
}
}
scala-模式匹配的更多相关文章
- scala模式匹配的使用
Scala模式匹配 Tip1:模式总是从上往下匹配,如果匹配不到则匹配case_项(类似Java中的default) Tip2:与Java和C语言不同,不需要在每个分支末尾使用break语句退出(不会 ...
- scala模式匹配详细解析
一.scala模式匹配(pattern matching) pattern matching可以说是scala中十分强大的一个语言特性,当然这不是scala独有的,但这不妨碍它成为scala的语言的一 ...
- Spark记录-Scala模式匹配
Scala模式匹配 模式匹配是Scala函数值和闭包后第二大应用功能.Scala为模式匹配提供了极大的支持,处理消息. 模式匹配包括一系列备选项,每个替代项以关键字大小写为单位.每个替代方案包括一个模 ...
- Scala模式匹配和类型系统
1.模式匹配比java中的switch case强大很多,除了值,类型,集合等进行匹配,最常见的Case class进行匹配,Master.scala有大量的模式匹配. Case "_&qu ...
- scala模式匹配与样例类
样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x") ...
- Scala模式匹配| 隐式转换
1. 模式匹配 Scala中的模式匹配类似于Java中的switch语法,但是更加强大.模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分 ...
- scala 模式匹配详解 3 模式匹配的核心功能是解构
http://www.artima.com/scalazine/articles/pattern_matching.html这篇文章是odersky谈scala中的模式匹配的一段对话,我做了部分片段翻 ...
- scala 模式匹配详解 2 scala里是怎么实现的?
在这篇martin和另外两位模式匹配领域专家的论文里说了模式匹配的几种实现方式,以及scala是选择哪种方式来实现的.http://lampwww.epfl.ch/~emir/written/Matc ...
- scala 模式匹配详解 1
什么是模式? 一些刚从java转到scala的同学在开发的过程中犹如深陷沼泽,因为很多的概念或风格不确定,scala里有很多的坑,模式匹配也算一个.我整理了一下自己所理解的概念,以及一些例子.这个系列 ...
- Scala模式匹配常用
今天在工作中遇到的几个小问题,总结一下: 1.因为业务需要调用PHP的接口,获取到的返回体需要做一段逻辑处理,然而某个字段接收到的参数是io.serializable类型,字段的类型不是预期的stri ...
随机推荐
- c++命名空间---namespace
C++ 命名空间 C++ 应用程序中.例如,您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func().这样,编译器就无法判断您所使用的是哪一个 func() 函数 ...
- Android Launcher分析和修改8——AllAPP界面拖拽元素(PagedViewWithDraggableItems)
接着上一篇文章,继续分析AllAPP列表界面.上一篇文章分析了所有应用列表的界面构成以及如何通过配置文件修改属性.今天主要是分析PagedViewWithDraggableItems类,因为在我们分析 ...
- java.util.concurrent介绍【转】
java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent ...
- mongodb查询数据库中某个字段中的值包含某个字符串的方法
正则表达式最能解决: 例如: db.getCollection(.*$/}) 这里主要是注意正则表达式要写对,该转义的注意转义,否则报错.
- 使用Sublime Text搭建python调试环境[转]
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 2. ...
- SQL Server -- 随笔
-- 判断是否存在 LimeNextMonthBirthday 表 ) PRINT '存在' ELSE PRINT'不存在' -- 如果存在 则删除 没有 则打印 不存在 ) DROP TABLE L ...
- 解决 kubenetes无法创建pod No API token found for service account "default"
在master中 openssl genrsa -out /etc/kubernetes/serviceaccount.key 修改kube-apiserver.service添加参数 --servi ...
- JS控制只能输入数字并且最多允许小数点两位
直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- [原]openstack-kilo--issue(九) heat stacks topology中图形无法正常显示
本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. ======声明======= 欢迎转载:转载请注明出处 http://www. ...
- day_5.26python动态添加属性和方法
python动态添加属性和方法 既然给类添加⽅法,是使⽤ 类名.⽅法名 = xxxx ,那么给对象添加⼀个⽅法 也是类似的 对象.⽅法名 = xxx '''2018-5-26 13:40:09pyth ...