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 ...
随机推荐
- 3. ELMo算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- [转]MySql 5.7关键字和保留字-附表
原文地址:https://www.cnblogs.com/Z-Fanghan/p/6892944.html 现在使用navicat图形界面或者Hibernate做映射生成表的时候,渐渐的会忽视掉关键字 ...
- cad巧用插件自定义填充图形
很多同志如果遇到奇葩的填充图案,怎么办,找不到合适的,自己辛苦画了一遍,想把它作为自己的自定义的图案,怎么办呢. 今天老王给你您介绍个好用的插件. 首先在命令行输入命令 ap 弹出加载对话框 打开窗 ...
- Go Revel - Testing(测试模块)
revel提供了一个测试框架来方便的为自己的程序编写功能测试用例. 默认创建的应用骨架附带一个简单的测试用例,这里将它作为起点 ##概览 测试保存在`tests`目录: corp/myapp app/ ...
- hdoj:2035
#include <iostream> using namespace std; int main() { long a, b; && b != ) { long resu ...
- 《FPGA全程进阶---实战演练》第七章 让按键恢复平静
1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”, B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...
- WebRTC 配置环境
复制文件到指定文件路径 cp -rf /home/leehongee/LeeHonGee/jdk1.7.0_45 /usr/lib/jvm 创建文件夹 mkdir jvm 修改环境变量 sudo ...
- 什么是对象:EVERYTHING IS OBJECT(万物皆对象)
所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.
- Linux查找指令(阮一峰)
1. find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> ...
- react如何监听路由url变化
"componentWillReceiveProps" "shouldComponentUpdate" "componentWillUpdate&qu ...