快学Scala-09--模式匹配

1.匹配字符串

A => 1  B => 2  C => 3

//传统方法
def getNum(msg:String):Int={
    if(msg=="A") 1
    else if (msg=="B") 2
    else if (msg=="C") 3
    else  4
}
//模式匹配方法
def getNum(msg:String):Int={
    msg match{
        case "A" => 1
        case "B" => 2
        case "C" => 3
        case _ => 4
    }
}
    getNum("B")
x

1

//传统方法

2

def getNum(msg:String):Int={

3

    if(msg=="A") 1

4

    else if (msg=="B") 2

5

    else if (msg=="C") 3

6

    else  4

7

}

8

//模式匹配方法

9

def getNum(msg:String):Int={

10

    msg match{

11

        case "A" => 1

12

        case "B" => 2

13

        case "C" => 3

14

        case _ => 4

15

    }

16

}

17

    getNum("B")

2.匹配数组

var arr = Array(0,1,4)
var info=arr match {
  case Array(0) => println(0)
  case Array(x,y) => print(x,y)
  case Array(0,_*) => print("_","*")   //_* 代表多个数字,数目不确定
  case _ => println("ANY")
}

1

var arr = Array(0,1,4)

2

var info=arr match {

3

  case Array(0) => println(0)

4

  case Array(x,y) => print(x,y)

5

  case Array(0,_*) => print("_","*")   //_* 代表多个数字,数目不确定

6

  case _ => println("ANY")

7

}

3.样例类

class  Dog
//其实这里是略写 Jing8(val age:Int)
case class  Jing8(age:Int)
case class  Bage(name:String) extends Dog

//apply 在样例类中是创建对象的
//unapply 在样例类当作是是取出属性的方法
//我们不再需要new 一个对象,在调用方法apply() 的时候
def ma(cl :Any): Unit ={
  cl match {
    case Jing8(age) => print(age)
    case Bage(name) => println(name)
    case _ => println("Any")
  }
}
ma(Jing8(45))   //实际上这里传入的是一个对象的实例,使用了省略的apply方法,apply方法可以不用。出来就用
ma(Bage("Bage"))
x

1

class  Dog

2

//其实这里是略写 Jing8(val age:Int)

3

case class  Jing8(age:Int)

4

case class  Bage(name:String) extends Dog

5


6

//apply 在样例类中是创建对象的

7

//unapply 在样例类当作是是取出属性的方法

8

//我们不再需要new 一个对象,在调用方法apply() 的时候

9

def ma(cl :Any): Unit ={

10

  cl match {

11

    case Jing8(age) => print(age)

12

    case Bage(name) => println(name)

13

    case _ => println("Any")

14

  }

15

}

16

ma(Jing8(45))   //实际上这里传入的是一个对象的实例,使用了省略的apply方法,apply方法可以不用。出来就用

17

ma(Bage("Bage"))

18


//其实这里是略写 Jing8(val age:Int)  看到红线,给age 赋值编译报错

原文地址:https://www.cnblogs.com/feixiaobai/p/c2738b3907bf5c122662a658e69e3d5f.html

时间: 2024-10-11 14:08:24

快学Scala-09--模式匹配的相关文章

快学Scala(14)--模式匹配和样例类

更好的switch def main(args: Array[String]): Unit = { var sign: Int = 0 val ch: Char = '+' val color = Color.BLACK sign = ch match { case '+' => 1 case '-' => -1 case _ => 0 } color match { case Color.RED => ; case Color.BLACK => ; case _ =>

快学scala笔记.

第一章 基础 val 定义的值实际上是一个常量 var 声明其值可变的变量 val xmax,ymax = 100 var greeting,message: String = null 1.3 常用类型 Scala的7种数值类型:Byte.Char.Short.Int.Long.Float和Double 1.toString() 2.to(10) "Hello".intersect("World") 1.4 算术和操作符重载 val answer = 8 * 5

快学Scala 第十九课 (trait的abstract override使用)

trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override.但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法. 下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中. 在特质中声明抽象方法中有

快学Scala课后习题答案

分享一个之前做快学Scala的课后习题(2-21章节,19无)的Github链接,我把习题的文字写在了每个回答的注释上面,这样方便大家对照着看,省的回过头去对照着pdf看了,如果有做的不对的地方希望大家给予指正. 链接如下,http://github.com/fxxkinglife/scala-hello. 举一个第二章节的例子, object charpter02 { /* * 2.1 * 一个数字如果为正数,则它的signum为1; * 如果是负数,则signum为-1; * 如果为0,则s

快学scala 第十一章 操作符 读书笔记及习题答案代码

chapter 11 操作符 标签:快学scala 一.笔记 scala种可以在反引号中包含几乎任何字符序列, val 'val' = 42 所有的操作符都是左结合的,除了以冒号(:)结尾的操作符,和赋值操作符.用于构造列表的::操作符是又结合的.1::2::Ni1的意思是1::(2::Ni1),先创建出包含2的列表,这个列表又被作为尾巴拼接到以1作为头部的列表中. 2. 函数调用语法:f(arg1, arg2,...)扩展到可以应用于函数之外的值,如果f不是函数或方法,那么这个表达式等于f.a

快学Scala习题解答—第一章 基础

1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine>好很多. 是本不错的入门书.而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法. 本文的目的就是针对这些习题进行解答 2 基础 2.1 在Scala REPL中键入3,然后按Tab键.有哪些方法可以被应用? 这个....直接操作一遍就有结果了.

快学Scala第14章----模式匹配和样例类

本章要点 match表达式是一个更好的switch,不会有意外掉入到下一个分支的问题. 如果没有模式能够匹配,会抛出MatchError.可以用case _ 模式来避免. 模式可以包含一个随意定义的条件,称作守卫. 你可以对表达式的类型进行匹配:优先选择模式匹配而不是isInstanceOf/asInstanceOf. 你可以匹配数组.元组和样例类的模式,然后将匹配到的不同部分绑定到变量. 在for表达式中,不能匹配的情况会被安静的跳过. 样例类继承层级中的公共超类应该是sealed的. 用Op

快学Scala 2

控制结构和函数 1.在Scala中,几乎所有构造出来的语法结构都有值.这个特性是为了使得程序更加精简,也更易读. (1)if表达式有值 (2)块也有值——是它最后一个表达式的值 (3)Scala的for循环就像是“增强版”的Java for循环 (4)分号(在绝大多数情况下)不是必须的 (5)void类型是Unit (6)避免在函数定义中使用return (7)注意别在函数式定义中漏掉了= (8)异常的工作方式和Java中基本一样,不同的是catch语句中使用“模式匹配” (9)Scala没有受

快学Scala第一部分

转载: 1.变量声明 [java] view plaincopy val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:String = null val greeting:Any = "Hello" //可以将多个值或变量放在一起声明 val xmax, ymax = 100 //xmax 和 ymax设为100 var greeting, message:String 

快学Scala(16)--XML处理

读取,分析,创建和编写xml 1. XML字面量 val doc = <html><head><title>Fred's Memoir's</title></head><body>...</body></html> //scala.xml.Elem val items = <li>Fred</li><li>Wilma</li> //scala.xml.NodeSe