13、scala模式匹配
1、模式匹配的基础语法
2、对类型进行模式匹配
3、对Array和List的元素进行模式匹配
4、case class与模式匹配
5、Option与模式匹配
1、模式匹配的基础语法
Scala提供了match case语法,即模式匹配。替代java的switch case。
两者不同,java中switch case仅能匹配变量的值,比如1、2、3等;scala中的match case可以匹配各种类型,比如变量的类型、集合的元素、有值或无值。
Match case语法:变量 match{ case 值=>语法}。如果值为下划线,代表了不满足以上所有情况下的默认情况如何处理。此外,match case中,主要一个case分支满足并处理了,就不会继续判断下一个case分支了。Java需要用break阻止。
案例成绩评价:
模式匹配中使用if守卫:在case后面的条件中,可以在值后面加一个if守卫,进行双重过滤。
在模式匹配中进行赋值:Scala中,可以将模式匹配的默认情况,下划线替换为一个变量名,此时模式匹配会将要匹配的值赋值给这个变量,从而可以在后面的处理语句中使用要匹配的值。(目的是拿到最后一个case _ 的值)
2、对类型进行模式匹配
scala中,模式匹配可以直接匹配类型,而不是值,java的swich case绝对做不到。
3、对Array和List的元素进行模式匹配
对Array进行模式匹配,分别可以匹配带有指定元素的数组、带有指定个数的数组、以某元素打头的数组,对LIst进行模式匹配,与Array类似,但需要使用List特有的::操作符。对朋友打招呼实例:
4、case class与模式匹配
case class类,中文也称为样例类,类似java的JavaBean的概念。即只定义field,并由scala编译时自动提供getter和setter方法,但是没有method。
case class的主构造函数接受的参数通常不需要使用var或val修饰,Scala自动会使用val修饰。(如果指定var修饰,还是会按照var来)。
scala自动为case class定义了伴生对象,并且定义了apply()方法,该方法接受主构造函数相同的参数,并返回case class对象。
5、Option与模式匹配
Scala中有一种特殊的类型,叫做Option。Option有两种值,一种是Some,表示有值,一种是None,表示没有值。
Option通常会用于模式匹配中,用于判断某个变量是有值还是无值,比null更加简洁明了。
13、scala模式匹配的更多相关文章
- Scala模式匹配和类型系统
1.模式匹配比java中的switch case强大很多,除了值,类型,集合等进行匹配,最常见的Case class进行匹配,Master.scala有大量的模式匹配. Case "_&qu ...
- 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实战高手****第13课:Scala模式匹配实战和Spark源码鉴赏
package com.dt.spark.scala.bascis class Dataframework case class Computerframework (name:String,popu ...
- 强大的Scala模式匹配
用过Scala的模式匹配,感觉Java的弱爆了.Scala几乎可以匹配任何数据类型,如果默认的不能满足你的要求,你可以自定义模式匹配. 介绍Scala的模式匹配前,我们先了解清楚unapply()与u ...
- 13. Scala函数式编程(高级部分)
13.1 偏函数(partial function) 13.1.1 需求 -> 思考 一个集合val list = List(1,2,3,4,"abc"),完成如下要求 1) ...
- 12. Scala模式匹配
12.1 match 12.1.1 基本介绍 Scala中的模式匹配类似于Java中的switch语法,但是更加强大 模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需 ...
- scala模式匹配与样例类
样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x") ...
随机推荐
- Ubuntu 16.04通过Unity Tweak Tool实现点击图标最小化
1.通过Ubuntu软件中心安装Unity Tweak Tool 2.设置
- ci 在阿里云访问的时候404
最近想把ci 弄到阿里云去,结果发现,本地好好的,到了阿里云就404了.网上查了下 原来是 配置文件的问题. 配置文件就是 vhost下面的 **.conf文件 要有这个才行 location / ...
- postgresql备份和恢复
备份: pg_dump -d m3vg -h localhost -p 5432 -U delta -W -f 1024.dump -F tar 恢复: pg_restore -h localhost ...
- Spring注解配置定时任务<task:annotation-driven/>
http://m.blog.csdn.net/article/details?id=50945311 首先在配置文件头部的必须要有: xmlns:task="http://www.sprin ...
- poj 2556 Edge 向量旋转
//poj 2556 //sep9 #include<iostream> using namespace std; char s[256]; int main() { while(scan ...
- jedis 2.7.2 jar
jedis 2.7.2 已经公布. 源码https://github.com/xetorthio/jedis/releases/tag/jedis-2.7.2 jar 下载地址 http://dow ...
- 【NYOJ42】一笔画问题
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 Position:http://acm.nyist.net/JudgeOnline/problem.php?pid= ...
- hdoj--5611--Baby Ming and phone number(模拟水题)
Baby Ming and phone number Crawling in process... Crawling failed Time Limit:1500MS Memory Li ...
- spring基础学习---aop
1:无参aop下面为项目结构 2:通知类.MyAdvice package cn.edu.aop; import org.aspectj.lang.ProceedingJoinPoint; //通知类 ...
- ural 1012. K-based Numbers. Version 2(大数dp)
和1009相同,只是n达到了180位,可以模拟大数加和大数乘,这里用的java中的大数. import java.math.BigInteger; import java.util.Scanner; ...