scala 常用模式匹配类型
模式匹配的类型
包括:
- 常量模式
- 变量模式
- 构造器模式
- 序列模式
- 元组模式
- 变量绑定模式等。
常量模式匹配
常量模式匹配,就是在模式匹配中匹配常量
objectConstantPattern{
def main(args:Array[String]) :Unit = {
//模式匹配结果作为函数返回值
defpatternShow(x : Any) = x match {
case => "五"
case true => "真"
case "test" => "字符串"
case null => "null值"
case Nil => "空列表"
case _ => "其他常量"
}
println(patternShow())
println(patternShow(true))
println(patternShow(List()))
}
}
变量匹配
变量匹配,匹的是case语句后面接的是scala变量,如case x if(x == 5) => x等,在使用时一般会加守卫条件,当然也可以像case x => x这样使用,它会匹配任何输入的合法变量。
objectVariablePattern{
def main(args:Array[String]) :Unit = {
//模式匹配结果作为函数返回值
defpatternShow(x : Any) = x match {
case x if (x == ) => x
case x if (x == "Scala") => x
case _ =>
}
println(patternShow())
println(patternShow("Scala"))
}
}
构造器模式
构造器模式指的是,直接在case语句后面接类构造器,匹配的内容放置在构造器参数中。
//将Person类定义为case class
case class Person(name : String,age : Int) object ConstructorPattern{
def main(args:Array[String]) :Unit = {
val p = new Person("nyz",)
def constructorPattern(p : Person) = p match {
//构造器模式必须将Person类定义为case class,否则需要自己定义伴生对象并实现unapply方法。
case Person(name,age) => "name =" + name + ",age =" + age
//case Person(_,age) => "age =" + age
case _ => "Other"
}
println(constructorPattern(p))
}
}
序列化模式
序列模式用于匹配如数组Array、列表List、Range这样的线性结构集合,其实原理也是通过case class起作用的。
object SequencePattern{
def main(args:Array[String]) :Unit = {
val list = List("spark","Hive","SparkSQL")
val arr = Array("SparkR","Spark Streaming","Spark MLib")
def sequencePattern(p : Any) = p match {{
//序列模式匹配,_*表示匹配剩余内容,first、second匹配数组p中的第一、二个元素
case Array(first,second,_*) => first + "," + second
//_匹配数组p的第一个元素,但不赋给任何变量
case List(_,second,_*) => second
case _ => "Other"
}
println(SequencePattern(list))
println(SequencePattern(arr))
}
}
元组模式
元组模式用于匹配scala中的元组内容,用于匹配元组类型的变量内容
object TuplePattern{
def main(args:Array[String]) :Unit = {
val list = List("spark","Hive","SparkSQL")
def tuplePattern(t : Any) = t match {{
case (one,_,_) => one
//_*不适合用于元组,只适用于序列
//case (one,_*) => one
case _ => "Other"
}
println(tuplePattern(t))
}
}
类型模式
它可以匹配输入待匹配变量的类型
object TypePattern{
def main(args:Array[String]) :Unit = {
def typePattern(t : Any) = t match {
case t : String => "String"
case t : Int => "Intger"
case t : Double => "Double"
case _ => "Other Type"
}
}
变量绑定模式
在进行模式匹配时,有时不仅仅只是返回一个变量,也可以将某个变量绑定到某个模式上。从而将整体匹配结果赋值给该变量。
具体使用方法是在模式前面加变量和@符号。
object VariableBindingPattern{
def main(args:Array[String]) :Unit = {
var t = List(List(,,),List(,,))
def variableBindingPattern(t : Any) = t match {{
//变量绑定,采用变量名(这里是e)
//与@符号,如果后面的模式匹配成功,则将整体匹配结果作为返回值
case List(_,e@List(_,_,_)) => e
case _ => Nil
}
println(variableBindingPattern(t))
}
}
scala 常用模式匹配类型的更多相关文章
- Scala 常用语法
Clojure首先是FP, 但是由于基于JVM, 所以不得已需要做出一些妥协, 包含一些OO的编程方式 Scala首先是OO, Java语法过于冗余, 一种比较平庸的语言, Scala首先做的是简化, ...
- Scala之模式匹配(Patterns Matching)
前言 首先.我们要在一開始强调一件非常重要的事:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中.这是Scala模式匹配之所以重要且实用的一个关键因素!我们会在文章的后半部分具 ...
- Scala的存在类型
Scala的存在类型 存在类型也叫existential type,是对类型做抽象的一种方法.可以在你不知道具体类型的情况下,就断言该类型存在. 存在类型用_来表示,你可以把它看成java中的?. 下 ...
- SQL常用字段类型
中文常用字段类型 1. 名称类 nvarchar(10) 2. 数量 int 3. 时间 date 4. 货币 money 5. 编号 ...
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 第53讲:Scala中结构类型实战详解
今天学习了scala的结构类型,让我们看看代码 class Structural {def open() = print("A class interface opened") } ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- C++中string转化为常用数值类型
//模板类 用于将string类型转化为 常用数值类型 template <class Type> Type stringToNum(const string& str) { is ...
随机推荐
- ASP.NET Core学习——4
静态文件 静态文件(static files),例如HTML.CSS.图片和JavaScript之类的资源会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于web root(< ...
- CSS:教程
ylbtech-CSS:教程 1.返回顶部 1. CSS 教程 通过使用 CSS 我们可以大大提升网页开发的工作效率! 在我们的 CSS 教程中,您会学到如何使用 CSS 同时控制多重网页的样式和布局 ...
- SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")时间转换问题
SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")时间转换问题 程序代码: import java.text.ParseException; i ...
- Nginx 配置参数
1 Proxy_send_timeout 定义后端在多久的时间内必须返回完所有的数据给Nginx. 2 Proxy_read_timeout
- PAT_A1130#Infix Expression
Source: PAT A1130 Infix Expression (25 分) Description: Given a syntax tree (binary), you are suppose ...
- 拾遗:btrfs
#扫描 btrfs 文件系统btrfs device scan btrfs device scan /dev/sda #创建子卷或快照 btrfs subvolume create /mnt/btrf ...
- 网络编程(二)——TCP协议、基于tcp协议的套接字socket
TCP协议与基于tcp协议的套接字socket 一.TCP协议(流式协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的 ...
- Java 中 Properties 类的操作
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- 远程服务器安装nginx
肯定有前端的小伙伴在腾讯云或者阿里云上购买了服务器,却不知道怎么访问使用它,那我们就一起来安装学习下? xshell 登录服务器,输入公网ip和密码登录 ls 查看目录,which nginx ,查看 ...
- Vue-cli开发笔记一----------项目的结构
配置文件package.json: 搜索了配置的原理:https://segmentfault.com/a/1190000000344102 里面讲到:npm会在package.json文件中找scr ...