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 通配符

  1. _ 可以起到类似于 * 作用的通配符:
import org.apache.spark.SparkContext._ // 引入所有 jar 包
  1. 模式匹配

表示完全不清楚的值的通配符

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 特殊符号含义的更多相关文章

  1. Scala各种符号含义;scala =>符号含义总结

    符号: <- :for循环 -> :map映射 => :匿名函数 Int= :scala函数 _ :通配符 https://blog.csdn.net/bon_mot/article ...

  2. scala中常用但其他语言不常见的符号含义

    本文旨在介绍Scala在其他语言中不太常见的符号含义,帮助理解Scala Code. 随着我对Scala学习的深入,我会不断增加该篇博文的内容. 修改记录 ----2016.11.23  新增scal ...

  3. 设计模式-UML类图的各符号含义(转)

    UML类图的各符号含义 类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形.由这些基本的图形进行组合构成了类图的基本符号.这里要注意这几个符号的顺序,代表了类与类之间关系 ...

  4. Python字符串格式符号含义

    ====== #字符串格式化符号含义 #%C 格式化字符串及其ASCLL码 >>> '%c' %97 'a' >>> '%c' % 97 'a' >>& ...

  5. python字符串格式化符号含义及转义字符含义

    字符串格式化符号含义    符   号    说     明      %c    格式化字符及其ASCII码      %s    格式化字符串      %d    格式化整数      %o   ...

  6. python 字符串格式化符号含义及注释

    字符串格式化符号含义 符号 说明 %C 格式化字符及其ASCII码 %S 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) ...

  7. python3字符串的方法及注释/ 字符串格式化符号含义及格式化符号含义

     capitalize()   把字符串的第一个字符改为大写   casefold()   把整个字符串的所有字符改为小写   center(width)   将字符串居中,并使用空格填充至长度wid ...

  8. 北风设计模式课程---UML类图各符号含义

    北风设计模式课程---UML类图各符号含义 一.总结 一句话总结: 用脑子,挺好记的:实线关系肯定比虚线重,箭头.三角形.菱形的关系肯定依次加重,三角形是继承和实现, 1.UML类图中 线+箭头 表示 ...

  9. package.json for npm中依赖外部组件时常用的版本符号含义

    package.json中会有dependencies定义了项目依赖的外部组件,这些外部组件的依赖都是带有版本符号以表示被依赖组件的版本范围. { "dependencies" : ...

随机推荐

  1. 【vue】---- 新版脚手架搭建项目流程详解

    一.概述 本文将介绍vue项目完整的搭建流程,在使用新版本的脚手架基础上,进行了一系列的完善和配置.主要内容如下: 1.项目初始化 安装脚手架 创建项目 项目结构 2.项目搭建配置 引入第三方插件 路 ...

  2. 安装Windows10操作系统 - 初学者系列 - 学习者系列文章

    今天无事,就将安装操作系统的几种方式进行了总结( https://www.cnblogs.com/lzhdim/p/13719725.html ).这篇博文主要是对安装windows10操作系统的过程 ...

  3. 程序员的开源月刊:HelloGitHub(第 54 期)

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  4. windows 10 启动修复无法自动修复此计算机

    1. 失败后有两个选项卡:关机和高级选项,选择高级选项 2. 然后选择疑难解答 3. 选择高级选项 4. 选择回退到以前的版本 接下来需要登录,选择恢复到上一次正常启动的状态,注意选择保留数据,会有提 ...

  5. 免费开源工作流Smartflow-Sharp v2.0

    @font-face { font-family: 宋体 } @font-face { font-family: "Cambria Math" } @font-face { fon ...

  6. 基于COCA词频表的文本词汇分布测试工具v0.2

    update: 简单整理了一下代码的组织. 处理的单词封装成类,单词的修正,信息的显示都作为其内的方法. 写得还比较糙,工具本身可以封装,还有对于单词的变形基本没什么处理,以后有时间再改. 项目托管到 ...

  7. 全方位剖析 Linux 操作系统,太全了!!!

    Linux 简介 UNIX 是一个交互式系统,用于同时处理多进程和多用户同时在线.为什么要说 UNIX,那是因为 Linux 是由 UNIX 发展而来的,UNIX 是由程序员设计,它的主要服务对象也是 ...

  8. 轻松理解JVM的分代模型

    前言 上篇文章我们一起对jvm的内存模型有了比较清晰的认识,小伙伴们可以参考JVM内存模型不再是秘密这篇文章做一个复习. 本篇文章我们将针对jvm堆内存的分代模型做一个详细的解析,和大家一起轻松理解j ...

  9. ASP。NET MVC (NetCore 2.0)用于处理实体框架、DbContexts和对象的通用控制器和视图

    下载source - 1.5 MB 介绍 本文的源代码已更新到NetCore 2.0 ASP.净MVC项目. 当我们开始开发一个ASP.在Microsoft Visual Studio中,我们发现通过 ...

  10. 草率了,又一个Maven打包的问题

    经常遇到 Maven 相关的问题,这是之前的文章: 这个 Maven 依赖的问题,你敢说你没遇到过:https://mp.weixin.qq.com/s/SzBbDtyRUrk_7LH8SUbGXQ ...