Scala学习笔记-基础语法和语法糖

目录

一、apply方法说明

二、scala中,::,+:,:+,:::,+++的区别

三、Scala中的元组


一、apply方法说明

当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。

伴生对象的解释是:实现类似 Java 中那种既有实例成员有静态成员的类的功能。

为什么上面说它是一种 “功能” 呢?因为要想实现像 Java 中那样的类,光靠一个 Scala 类可不行。在 Scala 中,我们必须:

1. 定义一个 class 并在这里面实现所有的实例成员

2. 添加一个 object ,这个 object 要与上面的 class 同名,然后在这里面实现所有的静态成员

3. 定义的 class 与 object 必须在同一个文件内

满足了上面 3 条要求以后,就可以实现类似 Java 中一个类既存在实例成员又存在静态成员的功能了。然后我们通常把第 2 步添加的 object 称为 “伴生对象” 。

请看下面一个简单的例子:

class CompanionDemo {  
  println("new CompanionDemo clz")
  
  def init(): Unit = {
    // our codes...
  }  
}

object CompanionDemo {
  println("new CompanionDemo object")
  
  def prt(): Unit = {
    // our codes...
  }  
}

二、scala中,::,+:,:+,:::,+++的区别

初学scala的人都会被Seq的各种操作符所困惑。下面简单列举一下各个Seq操作符的区别

4种操作符的区别和联系

(1) :: 该方法被称为construct,意为构造,向队列的头部追加数据,创造新的列表。用法为: x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw, x::list等价于list.::(x))

(2) :+和+: 两者的区别在于  :+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match ,而+:则不行. 关于+:和:+,只要记住冒号永远靠近集合类型就OK了。

(3)++ 该方法用于连接两个集合,list1++list2

(4) ::: 该方法只能用于连接两个List类型的集合

          
(5)变长数组的增删改操作

     使用+=添加元素
     使用-=删除元素
     使用++=追加一个数组到变长数组

  def main(args: Array[String]): Unit = {
    val a:List[String] = List("22","33")
    println(1::a)

    val b:List[String] = List("张三","李四")
    println(":: 头部追加数据,无论x是列表与否,它都只将成为新生成列表的第一个元素,长度为list的长度+1")
    println(b::a)  //List(List(张三, 李四), 22, 33),长度为list的长度2+1
    println(a::b)

    //记住冒号永远靠近集合类型
    println("+:方法用于在头部追加元素")
    println(a+:"B") //类型为B
    println("B"+:a) //类型为a
    println(":+方法用于在尾部追加元素")
    println(a:+"C") //类型为a
    println("C":+a) //类型为c
    println("++ 该方法用于连接两个集合,list1++list2")
    println(a++b)
    println(b++a)
    println(a++"B")
    println("::: 该方法只能用于连接两个List类型的集合")
    println(a:::b)
    println(a:::"b")  //会报错,只能用于两个List类型的集合
  }

Scala学习笔记-基础语法和语法糖_第1张图片

 Scala学习笔记-基础语法和语法糖_第2张图片

https://www.pianshen.com/article/87811154749/

三、Scala中的元组

映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值

//获取元组中的元素可以使用下划线加脚标,但是注意点:元组中的元素脚标是从1开始的

def main(args: Array[String]): Unit = {
    //映射是K/V对偶的集合,对偶是元组的最简单形式,元组可以装着多个不同类型的值。
    //定义元祖时,用小括号将多个元素包起来,元素之间用逗号分割,
    //元素的类型可以不一样,元素个数可以任意多个
    //创建元组
    val t = ("spark",3.14,1024,("张三",true))
    println(t)
    //获取元组中的值
    val t1,(a,b,c) = ("spark",3.14,1024)
    println(t1)
    val r1 = t1._1
    println(r1)
    println(t1._2)

    //将对偶的集合转换成映射
    val arr = Array(("张三",30),("李四",21))
    //toMap可以将对偶的集合转换为映射
    val arrMap = arr.toMap
    println(arrMap)

    //拉链操作
    //zip命令可以将多个值绑定在一起
    val name = Array("张三","李四","王五")
    val scores = Array("15","86","67")
    //使用zip方法将对应的值帮到一起
    val zipTemp = name.zip(scores)
    println(zipTemp)
    println(zipTemp.toMap)
  }

 注意:如果两个数组的元素个数不一致,拉链操作后生成的数组的长度为较小的那个数组的元素个数

Scala学习笔记-基础语法和语法糖_第3张图片

注:元组和数组的区别:

  • 功能:类似于数组,用于存储不同类型的元素的集合
  • 区别
    • 数组:数组中只能存储一种类型的元素
    • 元组:元组中可以存储不同类型的元素

https://blog.csdn.net/mozhizun/article/details/68099194   --Scala和Java的语法差异

你可能感兴趣的:(大数据组件,scala,spark)