scala快速学习笔记

  1. val 是不可变, var 是可变对象

  2. trait 相当于 interface(多继承)和abstract(变量、方法实现)的结合体
    3.模式匹配:更灵活的Switch case(1 匹配值的时候,值类型可以不一样。2 可以匹配类型)
    4.类型
    Unit 表示void
    Noting 表示所有其他类型的子类型,表示没有值。不能有实例。用在类型推断推断不出来的时候,比如 val list=List()
    Any 所有类型的超类,是Object的子类。可以理解为Scala里的Object
    AnyRef 所有引用类型的超类
    AnyVal 所有值类型的超类
    Nil 表示长度为0的List
    5.定义类
    新建一个object(不是class,也不是trait),就相当于一个静态单例类,所有函数和变量都是静态的。
    定义class的时候,可以直接传入参数,相当于构造函数。
    重载构造函数时,直接用 def this,并且第一行必须调用默认this
    类的属性默认是public,除非显示private
    同一个文件的class和object同名,互为伴生,可以相互访问私有属性。
    object可以有apply方法,使用时直接用object的名字即可。

  3. 流程控制语句
    if else 和java一样
    while、 do while 和java一样,没有i++只有i+=1
    操作符方法 val a= 1 to 10,是 val = 1.to(10,1)的语法糖。
    s“$i” 等同于 ""+i,字符串化
    双重循环,可以用分号分割,写在一个for里面。 for里面还能写if,放在分号后面就行
    配合yeild关键字,还能把for 里面的变量取出来组成一个集合
    匿名函数 collect.foreach( e=>{print(e)}),有点像lambda。如果e只用一次,可以用_代替

7.方法\函数定义
返回值可以自动推断,但方法体内不能有return(必须省略)
如果只有一行,花括号可以省略
如果省略了方法名和方法体的等号,说明返回值为Unit
支持参数默认值

8.偏应用函数:某些情况下,方法的参数非常多,但是调用很频繁,只有少数参数变化,则可以定义偏应用函数,简化参数个数。
比如有一个函数 def fun(date:Date,log:String):Unit = print(s"$date $log")
然后date是不变的,但是要打印很多log,于是就会要 val date =new Date(); fun(date,"第一行");fun(date,"第二行").
为了每次不要都写两个参数,可以定义一个偏应用函数 def newfun = fun(date,_:String); 以后只需要 newFun("第一行"); newFun("第二行") 就可以了。

posted on 2022-12-22 10:13  J.M.Liu  阅读(31)  评论(0编辑  收藏  举报