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

news/2024/7/8 0:16:44

 模式匹配

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.}


http://lihuaxi.xjx100.cn/news/1799941.html

相关文章

动态规划c++

1. 什么是动态规划动态规划 (英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规…

【Wifi认证 攻击】

载入网卡 airmon-ng start wlan0开始监听 airodump-ng wlan0mon #扫描WIFI监听指定目标频道 airodump-ng -c CH值 --bssid BSSID值 -w wifi wlan0mon存在用户连接 反认证攻击断网 aireplay-ng -0 0 -a (BSSID) -c (STATION) wlan0mon等待用户重连 抓取握手包 aireplay-ng…

从Prefetch到Stream:重构v1.0代码库中的流式请求问题与解决方案

问题背景 在进行v1.0代码库的重构时,我们发现当前的prefetch参数存在一些问题。因此,我们计划将prefetch参数替换为stream。同时,我们决定在所有上传的操作中使用流式传输。 然而,是否需要对所有上传操作都进行流式传输存在一些疑…

网络小说作家写手提问常用的ChatGPT通用提示词模板

如何构思一个新颖、有趣、吸引人的小说故事情节? 如何创造一个令人难忘的小说角色? 如何平衡小说中的情节与人物描写? 如何让小说中的对话更加生动、自然? 如何构建小说的冲突与矛盾,推动故事发展? 如…

vue3+vant 实现树状多选组件

vue3vant 实现树状多选组件 需求描述效果图代码父组件引用selectTree组件 tree组件数据格式 需求描述 移动端需要复刻Pc端如上图的功能组件,但vant无组件可用,所以自己封装一个。 效果图 代码 父组件引用 import TreeSelect from "/selectTree.vu…

《向量数据库指南》——TruLens + Milvus Cloud 构建RAG案例

具体案例 如前所述,RAG 配置选择可能对消除幻觉产生重大影响。下文中将基于城市百科文章构建问答 RAG 应用并展示不同的配置选择是如何影响应用性能的。在搭建过程中,我们使用 LlamaIndex 作为该应用的框架。大家可以在 Google Colab( https://colab.research.google.com/git…

cat /proc/rk*

一、cat /proc/rkcif_lite_mipi_lvds [rootRV1126_RV1109:/]# cat /proc/rkcif_lite_mipi_lvds Driver Version:v00.01.0a Work Mode:ping pong Monitor Mode:idle aclk_cif_lite:491519999 hclk_cif_lite:245760000 dclk_cif_lite:297000000 Input Info:src subdev:m01_f_imx…

leetcode算法之前缀和

目录 1.DP34[模板]一维前缀和2.DP35[模板]二维前缀和3.寻找数组的中心下标4.除自身以外数组的乘积5.和为K的子数组6.和可被K整除的子数组7.连续数组8.矩阵区域和 1.DP34[模板]一维前缀和 一维前缀和 #include <iostream> #include <vector> using namespace std…