Scala重点总结

Scala重点总结

Scala中的重重之重,大家一定得记住哦!

在这里插入图片描述

scala类型层次结构:

Any: Any是所有类型的超类,也称为顶级类型。它定义了个别通用的方法 equals、hashcode和toString。Any有两个子类 AnyVal、AnyRef

AnyValue:AnyVal是值类型,有9个预定义的非空的值类型,如下图所示。其中Unit类似于java中的 void 是不带任何意义的值类型。他仅有一个实例可以是(),所有的类型都必须有返回值类型。Unit也是有返回值类型的一般最后一行代码是返回的类型值。(println是(),Unit类型)

AnyRef:AnyRef是引用类型,除了值类型以外的所有对象都是引用类型,在Scala中每个自定义的类型都是AnyRef的子类型。如果Scala被应用在java中,AnyRef就是java中的超类。相当于java.lang.Object

Nothing:Nothing是所有类型的子类型,称为底部类型。没有一个值是Nothing类型。他的用途之一就是给出终止性的信号 如:抛出异常、程序退出或者是无限循环。

Null:Null是所有引用类型的子类型,。他有一个关键字null所定义,Null主要是让Scala于其他jvm的语言的操作互通性。 几乎不会在Scala中使用。后面会有null的替代方案。

匿名函数

​ 先普及一下小概念吧! 匿名函数是一个 没有函数名的函数并且它的语法是 参数列名=>函数体 :匿名函数中有23个函数内置对象。 Function0-Function22 ,匿名函数的背后对应的是函数对象val f1:Function2【Int,Int,String】=(a:Int,b:Int)=>a+b+" "

object Function06 {

  def main(args: Array[String]): Unit = {



​    // 匿名函数声明

​    val f2: Function2[Int, Int, String] = (x: Int, y: Int) => x + y + " "



​    // 匿名函数使用

​    println(f2(1, 2))

​    println("-------------------------------------")

​    val f1: Function1[Int, Unit] = (n: Int) => println(n)



​    val list = List(1, 2, 3, 4, 5)



​    // 将函数对象作为方法的参数

​    list.foreach(f1)



​    println("-------------------------------------")


​    list

​      .filter((n: Int) => n != 3) // 保留集合中符合条件的数据

​      .foreach((n: Int) => println(n)) // 1 2 4 5

  }

}


隐式转换

​ 隐式转换函数指的是以implicit关键字声明的带有单个参数的函数

概念:一种类型转换为另一种类型。

通常命名为 one2other,在伴生对象中书写。

如果需要隐式转换,必须对隐式转换函数进行导入(import)

常用的使用方式:隐式值、隐式参数、隐式函数、隐式增强、隐式类

隐式转换时机:

​ 1、当表达式与预期类型不同时。【隐式值的应用】

​ 2、当对象访问一个不存在的类型时【隐式增强】

​ 3、当对象调用某个方法,而这个方法的参数声明与传入参数不匹配时【隐式函数】

编译器不会使用隐式转换:

​ 1、代码在不使用隐式转换可以痛殴过编译时,可不使用隐式转化。

​ 2、编译器不会尝试执行多个转换。【String-----》Person】

​ 3、存在二义性的转换是错误的。【同一个类中不能有两个同类型的隐式转换】

语法:

隐式值:implicit val aa:Int=1

隐式参数:def hello(implicit aa;int,bb:String)  这个两个Int值也是可一个,只要隐式值是一个即可。

​	  def hello1(Implicit aa:Int)

​	  def hello2(aa:Int)(implicit bb:Int)

​	注意:在使用隐式关键字的时候开头和末尾,之后不可以在添加参数

隐式函数:implicit def str2person(str:String)={}   一种类型转换为另一种类型。当调用方法传参方式不同时使用。



隐式增强:与隐式函数差不多  implicit def aa2person(aa:heihei)={

​	new Person(aa.name)     

} 也是把该类中没有的方法转到其他类中。


隐式类:不能单独自定义以个类,需要定义在对象中的隐式类。

​     主构造器接收一个类型 转换为隐式类型。(Man=====>Person)
元组(Tuple)

​ 一种特殊的数据类型,可以存放任意数据,类似于ArrayList[Object]

​ Scala中内置类22个元组 Tuple1-Tuple22

​ 一般Tuple2是用于存储map集合的<k,v>键值对的。

// 声明
scala> ("zs",1)
res18: (String, Int) = (zs,1)

scala> res18.getClass
res19: Class[_ <: (String, Int)] = class scala.Tuple2

scala> ("zs",1,false)
res20: (String, Int, Boolean) = (zs,1,false)

scala> res20.getClass
res21: Class[_ <: (String, Int, Boolean)] = class scala.Tuple3

// 获取元组中的值  语法: 元组引用名._n  获取元组中第n个值
scala> res20._1
res22: String = zs

scala> res20._2
res23: Int = 1

// 元组的遍历
scala> res20.productIterator
res24: Iterator[Any] = non-empty iterator

scala> for(n <- res24) println(n)
zs
1
false


20._2
res23: Int = 1

// 元组的遍历
scala> res20.productIterator
res24: Iterator[Any] = non-empty iterator

scala> for(n <- res24) println(n)
zs
1
false
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值