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)
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 = 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 包

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.mfbz.cn/a/607661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

typescript类型基础

typescript类型基础 枚举类型 enum Season {Spring,Summer,Fall,Winter }数值型枚举 enum Direction {Up,Down,Left,Right } const direction:Direction Direction.up每个数值型枚举成员都表示一个具体的数字&#xff0c;如果在定义一个枚举的时候没有设置枚举成员的值&…

5款智能写作工具,为大家一键生成原创文案

好的文案是能吸引眼球、传递信息&#xff0c;但对于许多人来说&#xff0c;写出好文案是一项耗时耗力的任务。而随着一些智能写作工具的出现&#xff0c;它为我们带来了很大的便利&#xff0c;无论是写作文案还是写作其它的内容&#xff0c;智能写作工具都能轻松帮助我们完成。…

感谢有你 | FISCO BCOS 2024年度第一季度贡献者榜单

挥别春天&#xff0c;FISCO BCOS开源社区迎来了2024年第一季度的共建成果。FISCO BCOS秉承对区块链技术的信仰&#xff0c;汇聚超过5000家企业机构、10万余名个人成员共建共治共享&#xff0c;持续打造更加活跃更加繁荣的开源联盟链生态圈。 开启夏日&#xff0c;我们见证了社…

从源头把控风险:集团多主体合规管理实战技巧分享

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 集团合规管理中&#xff0c;为了规避内外部利益冲突&#xff0c;需要对员工、供应商、经销商、客户、黑名单企业等多主体及其关联主体之间&#xff0c;进行多维度、多层级的关系挖掘与排查&#xff0c;避免利益…

MybatisPlus学习笔记

具体源码见&#xff1a; https://github.com/cug-lucifer/mp-demo/tree/master 快速入门 入门案例 需求&#xff1a; 新增用户功能根据id查询用户根据id批量查询用户根据id更新用户根据id删除用户 使用MybatisPlus的基本步骤 引入MybatisPlus依赖&#xff0c;代替Mybatis…

【题目】2023年全国职业院校技能大赛 GZ073 网络系统管理赛项赛题第4套B模块

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 赛题第4套 模块B&#xff1a;服务部署 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发等多个赛项技术支持 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加…

HackBar 新手使用教程(入门)

啥是Hackbar&#xff1f; Hackbar是一个Firefox 的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响。 有网址的载入于访问,联合查询,各种编码,数据加密功能。 这个Hackbar可以帮助你在测试SQL注入,XSS漏洞和网站的安全性,主要是帮助…

单单单单单の刁队列

在数据结构的学习中&#xff0c;队列是一种常用的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的原则。而单调队列是队列的一种变体&#xff0c;它在特定条件下保证了队列中的元素具有某种单调性质&#xff0c;例如单调递增或单调递减。单调队列在处理…

[Collection与数据结构] Map与Set(一):二叉搜索树与Map,Set的使用

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

Baidu Comate智能编码助手

Baidu Comate智能编码助手 &#x1f388;1.Baidu Comate的简介&#x1f388;2.安装Baidu Comate&#x1f388;3.Baidu Comate实现功能&#x1f388;4.使用注释进行智能代码提示&#x1f388;5.结束语 &#x1f388;1.Baidu Comate的简介 根据官网的介绍&#xff0c;我们了解到B…

模型onnx转ncnn小记

前期准备 Netron 模型准备&#xff1a;onnx模型,这里使用模型face【det_10g.onnx】 大佬文档引用&#xff1a;手工优化ncnn模型结构 - 知乎 ncnn算子描述参考&#xff1a;ncnn 算子操作描述-CSDN博客 模型优化 安装 pip install onnx-simplifier 先把我要转的模型优化合…

全网最详细的Python自动化测试(unittest框架)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Web 功能以及源码讲解

Web 功能以及语言讲解 培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;624032112 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 移动应用开发群&#xff1a;548238632 短视频制作群&#xff1a; 744125867极…

【6D位姿估计】FoundationPose 跑通demo 训练记录

前言 本文记录在FoundationPose中&#xff0c;跑通基于CAD模型为输入的demo&#xff0c;输出位姿信息&#xff0c;可视化结果。 然后分享NeRF物体重建部分的训练&#xff0c;以及RGBD图为输入的demo。 1、搭建环境 方案1&#xff1a;基于docker镜像&#xff08;推荐&#xf…

电脑windows系统压缩解压软件-Bandizip

一、软件功能 Bandizip是一款功能强大的压缩和解压缩软件&#xff0c;具有快速拖放、高速压缩、多核心支持以及广泛的文件格式支持等特点。 Bandizip软件的功能主要包括&#xff1a; 1. 支持多种文件格式 Bandizip可以处理多种压缩文件格式&#xff0c;包括ZIP, 7Z, RAR, A…

Win10环境下yolov8快速配置与测试-详细

0.0 说明 参考黄家驹的Win10 环境下YOLO V8部署&#xff0c;遇到一些问题&#xff0c;并解决实现&#xff0c;记录如下: 斜线字体是原博客中的创作 0.1 参考链接 https://blog.csdn.net/m0_72734364/article/details/128865904 1 Windows10下yolov8 tensorrt模型加速部署 …

苍穹外卖Day06笔记

疯玩了一个月&#xff0c;效率好低&#xff0c;今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency&#xff1f; 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖&#xff0c;而这个依赖低层就引入了httpclinet的依赖&#xff0c;根据依…

Centos7网络处理name or service not known

1、编辑->虚拟网络编辑器 2、查看本机的ip 3、 /etc/sysconfig/network-scripts/ 查看文件夹下面的 ifcfg-eth33 后面的33可能不一样 vi /etc/resolv.conf 编辑文件添加以下DNS nameserver 114.114.114.114 4、设置本机的网络 5、ping www.baidu.com 先重启…

linux调试

文章目录 1. 使用打印来调试1.1 重定向1.2 标准预定义宏1.3 日志代码 2. 内核异常2.1 内核打印2.1.1 打印级别2.1.2 跟踪异常2.1.3 动态打印2.1.4 RAM console 2.2 OOPS2.2.1 有源代码的情况2.2.2 没有源代码的情况 3 查看日志4 工具调试 1. 使用打印来调试 1.1 重定向 2>…

Django之创建Model以及后台管理

一&#xff0c;创建项目App python manage.py startapp App 二&#xff0c;在App.models.py中创建类&#xff0c;以下是示例 class UserModel(models.Model):uid models.AutoField(primary_keyTrue, auto_createdTrue)name models.CharField(max_length10, uniqueTrue, db…
最新文章