scala 学习笔记七 基于类型的模式匹配
1、介绍
Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
先看一个整型值模式匹配的例子
    
match 对应 Java 里的 switch,但是写在选择器表达式之后。即: 选择器 match {备选项}。
2、基于类型的模式匹配
    
acceptAnything的参数类型Any允许任何类型的参数,如果向某个方法传递的类型具有多样性,并且没有任何共性部分,那么Any就可以解决此问题。
其它例子
  case class Person(name:String, age:Int,phone:String){
  }
  def acceptAnything(x:Any):String = {
    x match {
      case s:String => "A string:" +s
      case i:Int if(i < ) => s"An Int less than 20:$i"
      case p:Person => s"A person ${p.name}"
      case _ => "Unkown"
    }
  }
  def plus1(x:Any):Any ={
    x match {
      case s:String => s
      case i:Int =>i
      case p:Person =>p.name
      case _ => "unkown"
    }
  }
  def convertToSize(x:Any):Any={
    x match {
      case i:Int => i
      case s:String => s.length
      case f:Float => f
      case p:Person =>
      case v:Vector[Int] =>v.length
      case _ =>
    }
  }
  def convertToSize1(x:Any)={
    x match {
      case i:Int => i
      case s:String => s.length
      case f:Float => math.round(f)
      case p:Person =>
      case v:Vector[Int] =>v.length
      case _ =>
    }
  }
  def forecast(i:Int)={
    i match {
      case i if(i>=) => "Sunny"
      case i if(i>=) => "Mostly Sunny"
      case i if(i>=) => "Partly Sunny"
      case i if(i>=) => "Cloudy"
      case i if(i>) => " most Cloudy"
      case _ => " unkown"
    }
  }
  def main(args: Array[String]): Unit = {
    val v = forecast(-)
    println(v)
    //输出:5
    val v2 = forecast()
    println(v2)
    //输出:11
    val v3 = forecast()
    println(v3)
    //输出:2
    val v4 = forecast()
    println(v4)
    //输出:0
  }
scala 学习笔记七 基于类型的模式匹配的更多相关文章
- Scala学习笔记(1)-基本类型归纳
		1.小试牛刀 使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的. Ctrl+D可退出REPL sh ... 
- [Scala]Scala学习笔记七 正则表达式
		1. Regex对象 我们可以使用scala.util.matching.Regex类使用正则表达式.要构造一个Regex对象,使用String类的r方法即可: val numPattern = &q ... 
- 基于.net的分布式系统限流组件   C# DataGridView绑定List对象时,利用BindingList来实现增删查改   .net中ThreadPool与Task的认识总结  C# 排序技术研究与对比  基于.net的通用内存缓存模型组件  Scala学习笔记:重要语法特性
		基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ... 
- go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
		目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ... 
- (转)Qt Model/View 学习笔记 (七)——Delegate类
		Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ... 
- Typescript 学习笔记七:泛型
		中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ... 
- python3.4学习笔记(七) 学习网站博客推荐
		python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ... 
- Go语言学习笔记七: 函数
		Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ... 
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
		Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ... 
随机推荐
- Revit二次开发示例:DeleteDimensions
			在本例中,创建一个命令,实现删除所选中的尺寸标注. #region Namespaces using System; using System.Collections.Generic; using S ... 
- hihocoder 1509 异或排序
			题面在这里! 考虑前后两个数 x,y,可以发现S只有在(x xor y)的最高有1位上的取值是要被确定的 (如果x==y那么没有限制),可以推一下什么情况下是1/0. 于是我们模拟一下这个操作,判一判 ... 
- bzoj 2178
			这题调精度真痛苦啊(向管理员要了数据才调出来). 用的是hwd在WC2015上讲的方法,考虑将原图分割,根据每个圆的左右边界和圆与圆交点的横坐标来分割,这样原图就被分成很多竖着的长条,并且每一条中间都 ... 
- DataTable初次使用笔记
			概述:DataTable是一个jQuery插件,用于生成HTML表格,功能很强大. 使用: 使用DataTable需要引入jQuery,因为他是基于jQuery的插件,然后引入DataTable的js ... 
- JDK环境变量的配置说明
			一.Linux下的JDK安装及配置: 1. 使用命令uname –a查看系统的版本确定系统的位数,然后去JDK官网下载相应位数的安装程序,进行安装. 2. 使用rz命令将下载的JDK上传至Linux ... 
- "Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification"学习笔记
			这\(^{[1]}\)是一篇关于如何使用高维度特征在人脸验证中的文章,作者以主要LBP为例子,论述了高维特征和验证性能存在着正相关的关系,即人脸维度越高,验证的准确度就越高.由于那时候没有用DeepL ... 
- centos7安装kafka_2.11-1.0.0 新手入门
			系统环境 1.操作系统:64位CentOS Linux release 7.2.1511 (Core) 2.jdk版本:1.8.0_121 3.zookeeper版本:zookeeper-3.4.9. ... 
- Lucene_索引(域)的查询
			package cn.tz.lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.ap ... 
- THE CUSTOMISER
			http://www.wanga.com/cu.php The Customiser incorporates all of the features of Magic Mouse. It also ... 
- 使用stream(流)实现多表数据传输
			使用stream(流)实现多表数据传输 几乎所有的TCP和HTTP通信控件都支持stream(流)的传输. 使用stream(流)是可以实现多表数据传输的. 但这需要自定义协议了: 合并后的strea ... 
