scala总结

  1. case class 5个特点:(1)默认实现了apply方法,所以实例化时不用new关键词  (2)定义类时的属性默认val修饰,实例化后可以通过.属性进行访问  (3)重写过toString方法,更直观  (4)重写equals方法,是先比较类型,再比较实例属性  (5)提供copy方法复制实例,并且copy可以覆写属性值
  2. sealed case class主要为了解决在模式匹配时,类型写的不全的情况,用sealed修饰抽象类型,那么继承了这个类型的子类在进行模式匹配时,如果不全,会抛出一个警告,另外使用这个关键词修饰的类,只能被当前文件使用,所以可以在当前文件下找到所有需要匹配的类型
  3. 模式匹配中,需要注意这么几点:(1)构造器模式下,匹配的值声明类型必须是所有case里类型的父类  (2)常量模式下,如果需要引用早就用val定义好的常量,需要用英文波浪号括起来,这样不就被认为是一个变量名  (3)序列模式下,多个变量的简易表达用_*表示  (4)类型模式下,集合类型想List和Map等会出现类型擦除的情况,而array除外  (5)变量绑定,如果要对匹配的某个组进行绑定变量名,用 变量名 @ 组   (6)模式守卫,就是在匹配过程中,如果存在多个相同实例需要匹配,默认是不支持相同的变量名与之对应,必须声明多个变量名,然后在模式后用if判断来判断相同,以达到给相同实例给同一变量名  (7)模式重叠,就是在模式匹配过程中,每个模式匹配范围不一样,如果范围大的放在前面,就永远不会匹配到小范围的,所以需要把小范围的放在前面
  4. Option类型:None和Some都是其子类,并且可以当做集合来看待,所以支持for,map,filter等操作,并且通过Option类型省去判空的逻辑
  5. apply和unapply:定义在object中,apply又叫注入方法,无new实例时调用,unapply又叫抽取方法,在进行match case时调用,利用unapply方法可以逐层解析字符串的内容到对象中,并且在构造器匹配模式下,抽取给变量,当然unapply方法返回的是定量的值(元组形式组织的),如果想返回不定长的,需要使用unapplySeq,返回类型如Option[Seq[String]]
  6. 隐式系统,就是在调用某个函数时,参数类型不匹配,那么它会去找符合 当前类型 转换 函数期望类型的 隐式函数;调用者没有这个调用方法,会去隐式类里查找;另外隐式参数是在调用函数不传参数时,会去找作用域内符合隐式参数类型的值,隐式定义关键词implicit
posted @ 2021-01-17 18:38  财经知识狂魔  阅读(44)  评论(0编辑  收藏  举报