Scala 特殊符号含义
date: 2019-08-01 11:15:27
updated: 2019-08-22 15:22:32
Scala 特殊符号含义
1. :::
:::(三个冒号)只用于连接两个 List 类型的集合
val a = List(1, 2)
val b = List(3, 4)
val c = a ::: b
2. ::
::(两个冒号)表示普通元素与 List 的连接操作
val a = 1
val b = List(3, 4)
val c = 1 :: b
:: 是右侧对象的方法,即它是对象 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.
val a: Int => String = myint => "my int : " + myint.toString;
val b: (Int, Int) => String = (my1, my2) => "my int : " + my1.toString;
var c = (x: Int, y:Int) => "my int : " + x + y
def d(x: Int): String = {
"my:" + x;
}
以上四个方式的最终调用方式均为:a/b/c/d(参数)
其中 a b c 相当于在变量上赋予了一个函数体,而 d 本身就是一个函数
b 有两个参数,调用是必须有两个 Int 类型的参数
4. :+ 和 +:
:+ 方法:用于在尾部追加元素
+: 方法:用于在头部追加元素
冒号永远靠近集合类型
scala> List(1,2,3)
res1: List[Int] = List(1, 2, 3)
scala> res1:+2
res2: List[Int] = List(1, 2, 3, 2)
scala> 3+:res1
res4: List[Int] = List(3, 1, 2, 3)
5. ++
用于连接两个 Seq,eg:列表、集合、字符串、Map etc
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> a++List(4,5,6)
res7: List[Int] = List(1, 2, 3, 4, 5, 6)
6. <-
用于集合遍历
var arr = Array(1,2,3,4)
for (i <- arr) {
println(i)
}
1
2
3
4
7. ->
用于返回一个二元元组
scala> var a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> var b = List(4,5,6)
b: List[Int] = List(4, 5, 6)
scala> val c = a -> b
c: (List[Int], List[Int]) = (List(1, 2, 3),List(4, 5, 6))
8. ++=
用于字符串拼接,+= 为可变数组添加元素,可以用来加数值也可以用来拼接字符串,取决于等式左边是什么类型,但是 ++= 只能拼接字符串
scala> var s:String = "a"
s: String = a
scala> s += "b"
scala> println(s)
ab
scala> s ++= "c"
scala> println(s)
abc
9. _
9.1 通配符
- _ 可以起到类似于 * 作用的通配符:
import org.apache.spark.SparkContext._ // 引入所有 jar 包
- 模式匹配
表示完全不清楚的值的通配符
object MatchTest extends App {
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(matchTest(3))
}
9.2 指代集合中的每一个元素
遍历集合筛选列表中大于某个值的元素
val lst = List(1,2,3,4,5)
val lstFilter = lst.filter(_ > 3)
当做参数的占位符时,编译器有可能会没有足够的信息推断缺少的参数类型。
val f = _ + _
这时,可以使用冒号来指定类型
val f = (_: Int) + (_: Int)
9.3 获取元组中指定下标的元素值
val ss = (1,"22","333")
println(ss._1)
9.4 使用模式匹配可以用来获取元组的组员
val m = Map(1 -> 2,2 -> 4)
for ((k,_) <- m) println(k)
//如果不需要所有部件, 则在不需要的部件使用 _ ;本例只取key,因此在value处用 _
9.5 代表某一类型的默认值
加不加空格都可以
对于Int类型来说,它是0
对于Double来说,它是0.0
对于引用类型来说,它是null
var s: Int = _
def main(args: Array[String]): Unit = {
println(s)
}
9.6 :_* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理
def main(args: Array[String]): Unit = {
val s = sum(1 to 5 :_*) //把1 to 5当作一个序列处理
println(s)
}
def sum(args: Int*) : Int = {
var result = 0 ;
for(s2 <- args) {
result += s2 ;
}
result ;
}
10. +=
为可变数组添加元素
11. -=
从可变数组中移除相应的值
var map = Map(1 -> 1,2 -> 2,3 ->3 )
map -= 1
结果:scala.collection.immutable.Map[Int,Int] = Map(2 -> 2, 3 -> 3)
Scala 特殊符号含义的更多相关文章
- Scala各种符号含义;scala =>符号含义总结
符号: <- :for循环 -> :map映射 => :匿名函数 Int= :scala函数 _ :通配符 https://blog.csdn.net/bon_mot/article ...
- scala中常用但其他语言不常见的符号含义
本文旨在介绍Scala在其他语言中不太常见的符号含义,帮助理解Scala Code. 随着我对Scala学习的深入,我会不断增加该篇博文的内容. 修改记录 ----2016.11.23 新增scal ...
- 设计模式-UML类图的各符号含义(转)
UML类图的各符号含义 类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形.由这些基本的图形进行组合构成了类图的基本符号.这里要注意这几个符号的顺序,代表了类与类之间关系 ...
- Python字符串格式符号含义
====== #字符串格式化符号含义 #%C 格式化字符串及其ASCLL码 >>> '%c' %97 'a' >>> '%c' % 97 'a' >>& ...
- python字符串格式化符号含义及转义字符含义
字符串格式化符号含义 符 号 说 明 %c 格式化字符及其ASCII码 %s 格式化字符串 %d 格式化整数 %o ...
- python 字符串格式化符号含义及注释
字符串格式化符号含义 符号 说明 %C 格式化字符及其ASCII码 %S 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) ...
- python3字符串的方法及注释/ 字符串格式化符号含义及格式化符号含义
capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度wid ...
- 北风设计模式课程---UML类图各符号含义
北风设计模式课程---UML类图各符号含义 一.总结 一句话总结: 用脑子,挺好记的:实线关系肯定比虚线重,箭头.三角形.菱形的关系肯定依次加重,三角形是继承和实现, 1.UML类图中 线+箭头 表示 ...
- package.json for npm中依赖外部组件时常用的版本符号含义
package.json中会有dependencies定义了项目依赖的外部组件,这些外部组件的依赖都是带有版本符号以表示被依赖组件的版本范围. { "dependencies" : ...
随机推荐
- Druid实现数据库连接用户密码加密
使用ConfigFilter ConfigFilter的作用包括: 从配置文件中读取配置 从远程http文件中读取配置 为数据库密码提供加密功能 1 配置ConfigFilter 1.1 配置文件从本 ...
- 005.操作系统及Linux系统,虚拟机的作用和发展历史
操作系统及其作用 操作系统发展史 Linux系统 虚拟机 操作系统 操作系统 操作系统的作用 不同领域的主流操作系统 操作系统(Operation System,OS) 操作系统作为接口的示意图 没有 ...
- CF1120 A. Diana and Liana
Description At the first holiday in spring, the town Shortriver traditionally conducts a flower fest ...
- 理解 JAVABEAN EJB POJO
<Spring实战>第一章:基本理念.各类名称熟语 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混 ...
- 吴恩达Machine Learning学习笔记(四)--BP神经网络
解决复杂非线性问题 BP神经网络 模型表示 theta->weights sigmoid->activation function input_layer->hidden_layer ...
- fastjson 1.2.6以下版本 解析字符串末尾出现/x会陷入死循环 报oom异常
记一次使用阿里fastjson遇到的问题 项目最好将fastjson版本升级到1.2.6或以上版本 1.2.6以下版本存在漏洞,测试如下代码直接报错 public class FastJsonTest ...
- Redis深入浅出
一.基础使用 常用命令 keys,expire(过期),ttl(查看生存时间),set,select,dbsize,flushdb(删除当前库),flushall(删除所有), get,append, ...
- 学习篇:NodeJS中的模板引擎:jade
NodeJS 模板引擎作用:生成页面 在node常用的模板引擎一般是 1.jade --破坏式的.侵入式.强依赖(对原有的html体系不友好,走自己的一套体系)2.ejs --温和的.非侵入式的.弱依 ...
- centos 启动 elasticsearch 失败集
环境: elasticsearch 6.5.2, java 连接失败 启动后当你 使用 curl http://localhost:9200 测试时,得到如下结果 Curl: (7) Failed c ...
- 修改默认配置文件.android.gradle.androidstudio到其他目录
.android 这个文件夹主要是用来存放模拟器的,是占用空间最大的一个,如果你没有使用它的模拟器,可以直接把这个文件夹删除.因为我建立了两个x86的模拟器,吃掉了我20G的空间.果断搬走. 复制当前 ...