Scala---模式匹配+偏函数

举报
前进的蜗牛 发表于 2023/12/25 09:57:39 2023/12/25
【摘要】 ​  模式匹配1、概念理解:Scala 提供了强大的模式匹配机制,应用也非常广泛。一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。2、代码及注意点模式匹配不仅可以匹配值还可以匹配类型从上到下顺序匹配,如果匹配到则不再往下匹配都匹配不上时,会匹配到case _ ,相当于defaultmatch 的最外...

  模式匹配

1、概念理解:

Scala 提供了强大的模式匹配机制,应用也非常广泛。

一个模式匹配包含了一系列备选项,每个都开始于关键字 case。

每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。

2、代码及注意点

  • 模式匹配不仅可以匹配值还可以匹配类型
  • 从上到下顺序匹配,如果匹配到则不再往下匹配
  • 都匹配不上时,会匹配到case _ ,相当于default
  • match 的最外面的”{ }”可以去掉看成一个语句
object Lesson_Match {
    def main(args: Array[String]): Unit = {
        val tuple = Tuple6(1,2,3f,4,"abc",55d)
        val tupleIterator = tuple.productIterator
        while(tupleIterator.hasNext){
            matchTest(tupleIterator.next())
        }

    }
    /**
    * 注意点:
    * 1、模式匹配不仅可以匹配值,还可以匹配类型
    * 2、模式匹配中,如果匹配到对应的类型或值,就不再继续往下匹配
    * 3、模式匹配中,都匹配不上时,会匹配到case_,相当于default
    */
    def matchTest(x:Any) = {
        x match {
            case x:Int => println("type is Int")
            case 1 => println("result is 1")
            case 2 => println("result is 2")
            case 3 => println("result is 3")
            case 4 => println("result is 4")
            case x:String => println("type is String")
            case_ => println("no match")
        }
    }


}

偏函数

如果一个方法中没有match 只有case,这个函数可以定义成PartialFunction偏函数。偏函数定义时,不能使用括号传参,默认定义PartialFunction中传入一个值,匹配上了对应的case,返回一个值,只能匹配同种类型。

1./**
2. * 一个函数中只有case 没有match ,可以定义成PartailFunction 偏函数
3. */
4. object Lesson_PartialFunction {
5.  def MyTest : PartialFunction[String,String] = {
6.     case "scala" =>{"scala"}
7.     case "hello"=>{"hello"}
8.     case _=> {"no match ..."}
9.  }
10.  def main(args: Array[String]): Unit = {
11.     println(MyTest("scala"))
12.  }
13.}



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。