Scala 特殊符号含义
1. :::
:::(三个冒号)只用于连接两个 List 类型的集合
1 | val a = List(1, 2) |
2. ::
::(两个冒号)表示普通元素与 List 的连接操作
1 | val a = 1 |
:: 是右侧对象的方法,即它是对象 b 的方法,而 :: 左侧的运算数是 :: 方法的参数,所以 1::b 的含义是 b.::(1)
3. =>
根据其不同数学含义,有不同的意义
3.1 值
匿名函数 or lamba 表达式,定义格式:(参数列表) => 函数体
(x: Int) => x + 1
3.2 类型
syntactic sugar 语法糖: 把需要的参数、类型、函数最简化,由编译器来解析(去糖化)
the type Int => String, is equivalent to the type Function1[Int,String] i.e. a function that takes an argument of type Int and returns a String.
1 | val a: Int => String = myint => "my int : " + myint.toString; |
以上四个方式的最终调用方式均为:a/b/c/d(参数)
其中 a b c 相当于在变量上赋予了一个函数体,而 d 本身就是一个函数
b 有两个参数,调用是必须有两个 Int 类型的参数
4. :+ 和 +:
:+ 方法:用于在尾部追加元素
+: 方法:用于在头部追加元素
冒号永远靠近集合类型
1 | scala> List(1,2,3) |
5. ++
用于连接两个 Seq,eg:列表、集合、字符串、Map etc
1 | scala> val a = List(1,2,3) |
6. <-
用于集合遍历
1 | var arr = Array(1,2,3,4) |
7. ->
用于返回一个二元元组
1 | scala> var a = List(1,2,3) |
8. ++=
用于字符串拼接,+= 为可变数组添加元素,可以用来加数值也可以用来拼接字符串,取决于等式左边是什么类型,但是 ++= 只能拼接字符串
1 | scala> var s:String = "a" |
9. _
9.1 通配符
- _ 可以起到类似于 * 作用的通配符:
1 | import org.apache.spark.SparkContext._ // 引入所有 jar 包 |
- 模式匹配
表示完全不清楚的值的通配符
1 | object MatchTest extends App { |
9.2 指代集合中的每一个元素
1 | 遍历集合筛选列表中大于某个值的元素 |
当做参数的占位符时,编译器有可能会没有足够的信息推断缺少的参数类型。
1 | val f = _ + _ |
这时,可以使用冒号来指定类型
1 | val f = (_: Int) + (_: Int) |
9.3 获取元组中指定下标的元素值
1 | val ss = (1,"22","333") |
9.4 使用模式匹配可以用来获取元组的组员
1 | val m = Map(1 -> 2,2 -> 4) |
9.5 代表某一类型的默认值
加不加空格都可以
对于Int类型来说,它是0
对于Double来说,它是0.0
对于引用类型来说,它是null
1 | var s: Int = _ |
9.6 :_* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理
1 | def main(args: Array[String]): Unit = { |
10. +=
为可变数组添加元素
11. -=
从可变数组中移除相应的值
1 | var map = Map(1 -> 1,2 -> 2,3 ->3 ) |