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.toStringval b:(Int,Int) => String = (my1, my2) => "my int: " + my1.toStringvar c = (x:Int, y:Int) => "my int: " + x + ydef d(x: Int): String = {
"my:" + x
}

以上四个方式的最终调用方式均为:a/b/c/d(参数)
其中 a b c 相当于在变量上赋予了一个函数体,而 d 本身就是一个函数
b 有两个参数,调用是必须有两个 Int 类型的参数

4. :+和+:

:+ 方法:用于在尾部追加元素
+:方法:用于在头部追加元素

冒号永远靠近集合类型

scala> List(1,2,3)
res2: List[Int] = List(1, 2, 3)scala> res2:+4
res3: List[Int] = List(1, 2, 3, 4)scala> 0+:res2
res4: List[Int] = List(0, 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)
res5: 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 = ascala> s += "b"scala> println(s)
abscala> s ++="c"scala> println(s)
abc

9. _

9.1 通配符

1._可以起到类似*作用的通配符:

import org.apache.spark.SparkContext._ // 引入所有 jar 包

2.模式匹配
标识完全不清楚值的通配符

object MatchTest extends App {def matchTest(x: Int): String = x match {case 1 => "one"case 2 => "two"case _ => "many"}println(matchTest(3))
}

9.2 指代集合中的每一个元素

遍历集合筛选列表中大于某个值的元素

scala> val lst = List(1,2,3,4,5)
lst: List[Int] = List(1, 2, 3, 4, 5)scala> val lstFilter = lst.filter(_ > 3)
lstFilter: List[Int] = List(4, 5)

做参数的占位符

val f = _ + _

也可以用冒号来指定类型

val f = (_: Int) + (_: Int)

9.3 获取元组中指定下标的元素值

val ss = (1,"22","333")
println(ss._1)

9.4 使用模式匹配可以用来获取元组的组员

scala> val m = Map(1->2, 2->4)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 2 -> 4)scala> for((k,_) <- m) println(k)
1
2

//如果不需要所有部件,则在不需要的部件使用_;本例只取key,因此在value处用_

9.5 代表某一类型的默认值

加不加空格都可以
对于Int类型来说它是0
对于Double来说,它是0.0
对于引用类型来说,它是null

var s: Int = _ 
def main(args: Array[String]): Unit = {println(s)
}

9.6 _* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理

var s: Int = _ 
def main(args: Array[String]): Unit = {println(s)
}

10. +=

为可变数组添加元素

11. -=

从可变数组中移除相应的值

var map = Map(1 -> 1,2 -> 2,3 ->3 )
map -= 1
结果:scala.collection.immutable.Map[Int,Int] = Map(2 -> 2, 3 -> 3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用webpack拆分css

利用webpack拆分css {ignore} 要拆分css&#xff0c;就必须把css当成像js那样的模块&#xff1b;要把css当成模块&#xff0c;就必须有一个构建工具&#xff08;webpack&#xff09;&#xff0c;它具备合并代码的能力 而webpack本身只能读取css文件的内容、将其当作JS代码进行…

【Langchain实践】Few-shot examples for chat models 学习记录

构建向量存储 知识库examples是一个列表&#xff0c;列表元素是字典。与输入相关的文本放在from_text函数的第一个参数。embedding是嵌入模型&#xff0c;这部分如何使用本地模型&#xff0c;参考上一篇博客。metadatas是原始数据&#xff0c;也就是知识库。 to_vectorize […

C#:求解出n以内所有能被5整除的正整数的乘积

任务描述 本关任务&#xff1a;求解出n以内(包含n)所有能被5整除的正整数数的乘积s。 输入 从键盘输入一个正整数n&#xff0c;输入的n不超过100。 输出 对于每个样例n&#xff0c;输出n以内&#xff08;包含n&#xff09;所有能被5整除的正整数的乘积。 样例输入 19 ####样…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端&#xff08;Terminal&#xff09;来让用户登录&#xff0c; 切换的方式为使用&#xff1a;[Ctrl] [Alt] [F1]~[F6] …

折腾记:C++用开源库Snap7通过S7协议连接西门子PLC

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 不是教程&#xff0c;是避坑指…

2022年知识付费小程序案例分享资料,海量收录.完整版,线上销售沟通的技巧和方法,怎么进行沟通?

现在是互联网时代&#xff0c;很多购物平台和知识付费平台在网上全面开花&#xff0c;因此也诞生了销售员的工作也从线下转到了线上。线上销售毕竟不同于线下销售&#xff0c;想要将产品卖出去&#xff0c;沟通的技巧和方式也很重要。 一、 线上销售沟通前的准备 1、 心理上的准…

‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘

问题 ‘ChatGLMTokenizer’ object has no attribute ‘sp_tokenizer’ 解决方案 将self.sp_tokenizer SPTokenizer(vocab_file, num_image_tokensnum_image_tokens)移动到super().init()前面 self.sp_tokenizer SPTokenizer(vocab_file, num_image_tokensnum_image_token…

TypeScript学习日志-第十七天(泛型约束)

泛型约束 当我们使用泛型时非常方便&#xff0c;但是在使用的过程中也会遇到很多问题&#xff0c;如图&#xff1a; 这时候就会提示错误&#xff0c;因为返回的是相加的值&#xff0c;但是不是所有的类型都能相加的&#xff0c;例如来个undefined类型的 就不能进行相加了&…

回顾5款我非常喜欢的软件,希望大家也能喜欢

​ 我喜欢分享好软件,这就像与老友聊天一样让我感到快乐。在这个过程中,我可以回顾这些实用的小工具,也希望它们可以帮助到更多人。 1.备份工具——Cobian Backup ​ Cobian Backup是一款功能强大的备份软件&#xff0c;支持自动定时备份、增量备份、差异备份等多种备份方式。…

知识付费系统 设计,课程顾问怎么跟家长微信互动?这样去维护客户

当今天下&#xff0c;营销方式层出不穷&#xff0c;可是有些机构比较保守&#xff0c;始终坚持自己独有的一套模式&#xff0c;并且屡试不爽&#xff0c;今天&#xff0c;小编就带着大家一起来聊一聊课程顾问怎么跟家长微信互动。 维系客户客户有三个方面&#xff1a; 1:微信私…

7-66 按层遍历二叉树

用先序和中序序列构造一棵二叉树(树中结点个数不超过10个),通过用队记录结点访问次序的方法实现对二叉树进行按层遍历,即按层数由小到大、同层由左到右输出按层遍历序列。 输入格式: 第一行输入元素个数 第二行输入先序序列,以空格隔开 第三行输入中序序列,以空格隔开…

wePWNise:一款功能强大的红队Office宏VBA代码生成工具

关于wePWNise wePWNise是一款功能强大的Office宏VBA代码生成工具&#xff0c;该工具基于纯Python开发&#xff0c;可以帮助广大研究人员生成用于Office宏或模版的VBA代码&#xff0c;并以此来测试目标Office环境、应用程序控制和防护机制的安全性。 wePWNise的设计理念将自动化…

libcity 笔记:基本使用方法

介绍 — Bigscity-LibCity 文档 (bigscity-libcity-docs.readthedocs.io) 1 介绍 一个统一、全面、可扩展的代码库&#xff0c;为交通预测领域提供了一个可靠的实验工具和便捷的开发框架目前支持 交通状态预测 交通流量预测 交通速度预测 交通需求预测 起点-终点&#xff…

宽电压降压恒压DC-DC 电源管理芯片

产品描述 AP8851L 一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能 开关控制、基准电源、误差放大器、过 热保护、限流保护、短路保护等功能&#xff0c; 非常适合在宽输入电压范围具有优良 的负载和线性调整度。 AP8851L 芯片包含每周期的峰值 限流、软启…

Telnet协议:远程控制的基石

目录 1. 概述 2. 工作机制 3. 网络虚拟终端 4. 选项协商 5. 操作方式 6. 用户接口命令 7. 验证的过程 1. 概述 Telnet&#xff08;Telecommunication Network&#xff09;是一种用于在互联网上远程登录到计算机系统的标准协议。它早期被广泛用于远程终端连接&#xff0…

Baidu Comate智能编码助手:大学生的代码编写助手

Baidu Comate智能编码助手&#xff1a;大学生的代码编写助手 前言一、关于Baidu Comate智能编码助手1.1 Baidu Comate智能编码助手简介1.2 产品功能 二、安装使用&#xff08;本文以pycharm为例&#xff09;三、我的百度Comate之旅3.1智能推荐3.1.1 单行推荐3.1.2 多行推荐 3.2…

理解Java类加载与对象创建顺序

在Java编程中&#xff0c;理解类加载和对象创建的顺序是非常重要的。这个过程涉及到静态代码块、静态成员变量、实例代码块以及构造器的执行顺序。在本文中&#xff0c;我们将深入探讨Java中类加载和对象创建的顺序&#xff0c;并通过示例代码来加深理解。 类加载顺序 首先&a…

pg数据库学习知识要点分析-1

知识要点1 对象标识OID 在PostgreSQL内部&#xff0c;所有的数据库对象都通过相应的对象标识符&#xff08;object identifier&#xff0c;oid&#xff09;进行管理&#xff0c;这些标识符是无符号的4字节整型。数据库对象与相应oid 之间的关系存储在对应的系统目录中&#xf…

AI论文速读 |2024[IJCAI]TrajCL: 稳健轨迹表示:通过因果学习隔离环境混杂因素

题目&#xff1a; Towards Robust Trajectory Representations: Isolating Environmental Confounders with Causal Learning 作者&#xff1a;Kang Luo, Yuanshao Zhu, Wei Chen, Kun Wang(王琨), Zhengyang Zhou(周正阳), Sijie Ruan(阮思捷), Yuxuan Liang(梁宇轩) 机构&a…

SAP-PP-MM特殊库存的生产发料

如果有个物料是在特殊库存E&#xff0c;那么往生产订单发料是如何确定哪一个组件消耗这个特殊库存呢&#xff1f; 在生产订单中有哪些标记确定特殊库存&#xff1f;确定销售订单和行项目&#xff1f; 通过上图可以看到特殊库存标记1&#xff0c;也就是单独客户库存。 其他的特…