我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScala之模式匹配与隐式转换

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScala之模式匹配与隐式转换

模式匹配:

Scala中的模式匹配相当于Java中的switch

在Java中我们有switch  case default 这三个组成的基础语法,在Scala中我们是有match  和 case组成  default的作用由case代替

基础语法如下:

val a=10
    val b=20
    var c='+'
    c match {
      case '+'=> println(a+b)
      case '-'=> println(a-b)
      case _  =>println("错误的运算符")
    }

在Scala中是默认从这个case执行到下一个case的  

case _  是代表上述情况都不满足

模式守卫:

如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫

(其实是在case中添加if判断)

 val x=3.153
    val value: Any = x match {
      case i: Double if i >= 0 => i
      case j: Double if j < 0 => -j
      case _ => "type illegal"
    }

类型匹配:

在定义函数时 参数为所有对象的父类Any

 def function(x:Any): Unit ={
      x match {
        case s:String =>println("字符串")
        case i:Int=>println("整数")
        case d:Double=>println("小数")
        case _ =>println("其他")
      }
    }

对象匹配

对象的匹配是比较复杂的,单纯的比较是比较的地址值,两个变量的地址值是肯定不同的

object Test_03MatchObject {
  def main(args: Array[String]): Unit = {
    val sss: person1 = person1("sss", 1)
  sss match {
    case person1("sss",1)=>println("victory")
    case _=>println("defite")
  }
  }
  class person1(val name: String,val age :Int){
  }
  object person1{
    def apply(name: String, age: Int): person1 = new person1(name, age)
    def unapply(arg: person1): Option[(String, Int)] =
      if (arg==null)
      {
        None
      }
      else{
        Some(arg.name,arg.age)
      }  }
}

这里我们在object中定义了unapply方法   unapply方法相当于apply方法的逆应用,apply方法是在object中创建对象,而unapply方法是提取方法,提取操作的对象(传入的参数为对象,根据对象进行提取数据存入Some,与自己的传入的数据进行比较)这个方法也是和apply方法一样不用写方法名。

该方法主要用于解析对象(匹配对象)

样例类:

样例类中的主属性默认为val如果需要使用var则需要自己标注

样例类会自动生成unapply与apply等方法   节省了大量代码

把上述的class与object注释后新建样例类:(大量使用)

  case class person1(val name: String,val age :Int)

偏函数:

偏函数的化简写法:

我们可以直接调用collect函数进行调用偏函数参数直接写case+你需要的操作

化简写法相当于省掉了match,作用相当于 filter+map

在使用map的场景下也能使用偏函数

偏函数的使用:

    val list = List(List(1, 2, 3, 4), List(1), List(8, 5))
    val list1: List[Int] = list.collect({ case List(x, y, _*) => y })
  println(list1)

隐式转换:

官方定义:

当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用

于将类型进行转换,实现二次编译

个人理解:

隐式转换是我们在对一个对象调用它所在的类中没有的函数时发生错误所进行的操作

隐式函数:

隐式转换的步骤:

(1)需要现在下边定义一个目标类  在类中定义所调用的方法与逻辑

eg:我们对Int类型数据调用一个不存在的方法:

class MyRichInt(val self :Int)
  {
def myMax(int: Int):Int =
    {
      if (int>self)
        int
        else
        self
    }
  }

(2)在main函数中定义转换器

在开头要引入 ----   implicit 隐式转换的函数再进行定义

 implicit def changeInt(self:Int)  =
    {
new MyRichInt(self)
    }

当隐式转换的的方法相同与自身方法冲突,会使用自身的方法(因为不会编译失败---隐式转换的官方定义)

隐式参数:

在定义函数时我们已经知道了参数默认值  但是调用的时候我们需要加上括号

在这里我们引入了新概念   隐式参数

参数对比样例:

   implicit val name:String="lisi"
    def sayhi(implicit name: String="sd"): Unit =
    {
      println(s"hi $name")
    }
   sayhi
   sayhi()

参数默认值只是在调用函数的后边加一个括号

运行结果:

隐式类:

在普通类的前面添加关键字implicit会自动转换成隐式类

如果隐式转换的目标类转换成隐式类 则不需要在main函数中new隐式类的

可以直接调用指定函数

以上就是Java Scala之模式匹配与隐式转换的详细内容,更多关于Scala模式匹配与隐式转换的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScala之模式匹配与隐式转换

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScala之模式匹配与隐式转换

在Java中我们有switchcasedefault这三个组成的基础语法,在Scala中我们是有match和case组成default的作用由case代替,本文详细介绍了Scala的模式匹配与隐式转换,感兴趣的可以参考本文
2023-05-18

JavaScala的隐式转换详解

隐式转换是在Scala编译器进行类型匹配时,如果找不到合适的类型,那么隐式转换会让编译器在作用范围内自动推导出来合适的类型。本文通过代码示例介绍了Scala的隐式转换,感兴趣的小伙伴可以参考阅读
2023-05-17

Javascala模式匹配机制详解

模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断
2023-02-01

PHP的强制类型转换与隐式转换比较

PHP的强制类型转换与隐式转换比较在PHP中,类型转换是一个重要的主题,它涉及到如何处理不同数据类型之间的交互。PHP提供了两种类型转换方式:强制类型转换和隐式类型转换。在本文中,我们将通过具体的代码示例来比较这两种类型转换方式的异同。
PHP的强制类型转换与隐式转换比较
2024-03-08

c++类的隐式转换与强制转换重载详解

转换函数的名称是类型转换的目标类型,因此,不必再为它指定返回值类型;转换函数是被用于本类型的数值或变量转换为其他的类型,也不必带参数
2022-11-15

PostgreSQL模式匹配与正则表达式方法总结

目录1.1 PostgreSQL中的模式匹配和正则表达式1.2 传统SQL的LIKE操作符1.3 SIMILAR TO正则表达式1.4 POSIX正则表达式1.5 模式匹配函数substring总结1.1 PostgreSQL中的模式匹配和
2022-11-19

PHP类型的隐式转换:理解与应用

PHP是一种广泛应用的服务器端脚本语言,具有强大的功能和灵活性,但在处理数据类型转换时,很多初学者可能会遇到一些困惑。本文将要讨论的是PHP中的类型隐式转换,以及如何理解和应用这种特性。在PHP中,类型隐式转换指的是自动将一个数据类型转换
PHP类型的隐式转换:理解与应用
2024-03-08

MySQL优化案例之隐式字符编码转换

目录索性失效前提一个真实的案例优化前原始sql分析优化初步处理初步优化无效分析第二次优化处理第三次优化结论索性失效前提mysql中我们知道有:1、如果对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。2、
2022-07-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录