大数据处理学习笔记1.4 掌握Scala运算符

news2024/11/24 11:34:12

文章目录

  • 零、本讲学习目标
  • 一、运算符等价于方法
    • (一)运算符即方法
    • (二)方法即运算符
      • 1、单参方法
      • 2、多参方法
      • 3、无参方法
  • 二、Scala运算符
    • (一)运算符分类表
    • (二)Scala与Java运算符比较
  • 三、运算符种类
    • (一)中缀运算符(Infix Operator)
    • (二)前缀运算符(Prefix Operator)
    • (三)后缀运算符(Postfix Operator)
  • 四、运算符优先级
    • (一)简单说明
    • (二)运算优先级表
  • 五、课后作业

零、本讲学习目标

  1. 理解Scala运算符与方法的等价性
  2. 掌握Scala常用运算符
  3. 理解Scala运算符种类

一、运算符等价于方法

  • Scala中运算符即方法、方法即运算符。Scala中运算符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的方法。

(一)运算符即方法

  • op运算符与.op方法调用是等价的,op表示运算符:+-*/……
  • 演示x + yx.+(y)的等价性
    在这里插入图片描述

(二)方法即运算符

1、单参方法

val str = "abcdef"
val x1 = str.indexOf('c')
val x2 = str indexOf 'c'
  • str.indexOf('c')str indexOf 'c' 是等价的
    在这里插入图片描述

2、多参方法

val x3 = str.substring(2, 4)
val x4 = str substring (2, 4) // 如果参数有多个,需要用小括号包起来 
  • str.substring(2, 4)str substring (2, 4)是等价的

在这里插入图片描述

3、无参方法

val x5 = str.toUpperCase()
val x6 = str.toUpperCase // 方法调用时如果不需要传入任何参数,小括号可以省略
val x7 = str toUpperCase // 这种写法,如果没有参数,则括号不用写
  • 注意:使用后缀运算符toUpperCase之前必须导入scala.language.postfixOps类,否则会报错
    在这里插入图片描述
import scala.language.postfixOps
val x5 = str.toUpperCase()
val x6 = str.toUpperCase // 方法调用时如果不需要传入任何参数,小括号可以省略
val x7 = str toUpperCase // 这种写法,如果没有参数,则括号不用写

在这里插入图片描述

二、Scala运算符

(一)运算符分类表

运算符类型运算符
算术运算+、-、*、/
关系运算>、<、>=、<=
逻辑运算`&& 、
位运算`>>、>>>、<< 、~、 &、
比较运算==、!=

(二)Scala与Java运算符比较

  • Scala和Java运算符基本相同,不同之处在于比较运算符。

  • Java中,如果是基本数据类型,==!=比较的是值;如果是复杂数据类型,比较的是对象的地址,如果不是想比较地址而是想比较真正的内容,则需要使用equals方法。
    在这里插入图片描述

  • Scala中,如果是基本数据类型,==!=比较的是值;如果是复杂数据类型,会隐含地调用equals进行比较,这也就意味着 Scala中不存在Java中经典的equals问题。

val a = 100
val b = a + 0
a == b
val str1 = "Scala"
val str2 = str1 + ""
str1 == str2
str1.equals(str2)

在这里插入图片描述

三、运算符种类

(一)中缀运算符(Infix Operator)

  • 运算符符在两个操作数之间,2 + 3 等同于2.+(3)
    在这里插入图片描述

(二)前缀运算符(Prefix Operator)

  • 运算符在唯一的操作数之前 :-1、+3、 ~0xFF、!false

  • -1等同于1.unary_-,前缀运算符如同中缀运算符一样,也是方法调用的另一种方式,不同的是,方法名要在符号前加上前缀unary_
    在这里插入图片描述

  • 能作为前缀运算符的运算符只有+、-、!、~四种。如果你自己定义了unary_!方法就可以使用!前缀运算符来调用方法了,但是即使你定义了unary_**也不能用来调用该方法,因为*不是四种可用的前缀运算符之一。
    在这里插入图片描述

(三)后缀运算符(Postfix Operator)

  • 运算符在唯一的操作数之后str toUpperCase 等同于 str.toUpperCase(),后缀运算符不用点或括号调用无参方法。在Scala里,方法调用的空括号可以省略,但是如果去掉括号可能造成副作用就带上括号。
    在这里插入图片描述

四、运算符优先级

(一)简单说明

  • 由于Scala并没有真正的运算符,运算符其实是方法的一种形式,所以此处运算符的优先级,其实就是指方法的优先级。在Scala中方法的执行是有优先级的区别的,这也是为了解决传统运算符优先级问题。

  • 例如:3 + 2 * 5,我们期望获得的是13,但是根据Scala特点,Scala中所有运算符其实就是方法,那么按照这种说法,表达式应该等同于(3).+(2) 得到5(5).*(5) 得到25,与我们的预期不符!Scala如何解决此问题呢?靠的是运算符优先级。
    在这里插入图片描述

(二)运算优先级表

  • 具有最高优先级的运算符在表的顶部,那些优先低级排在底部。在一个表达式,优先级高的运算符将首先计算。
分类运算符关联
Postfix()、 []从左到右
Unary! 、~从右到左
Multiplicative*、 /、 %从左到右
Additive+、 -从左到右
Shift>>、 >>>、 <<从左到右
Relational>、 >=、 <、 <=从左到右
Equality==、 !=从左到右
BitwiseAND、&从左到右
BitwiseXOR、^从左到右
BitwiseOR、 |从左到右
LogicalAND、&&从左到右
Logical OR||从左到右
Assignment=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=从右到左
Comma,从左到右
  • 如果运算符以=结尾,且运算符并非比较运算符 <=>====,则运算符优先级等同于=,即优先级最低,例如+=-=等;同级别优先级从左到右统计;可以使用括号改变优先级,这是个好习惯,特别是在Scala这种可能过于简洁的语言中。
  • 特殊情况:以:字符结尾的方法由它的右操作数调用,并传入左操作数,以其它字符结尾的方法与之相反。a :: b 对应的是 (b).::(a) 而不是 (a).::(b)

五、课后作业

  • 在Scala交互模式下尝试Scala的各种运算符,熟悉Scala运算符的优先级

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

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

相关文章

买什么样的运动型蓝牙耳机好、运动型蓝牙耳机推荐

如今耳机是我们生活中很常见的数码产品了&#xff0c;在街上看到跑步、骑行&#xff0c;室内健身房&#xff0c;都能看到大家人手一副耳机&#xff0c;运动耳机已经成为很多人的运动必备品&#xff0c;因大众佩戴耳机的种类和风格有所不同&#xff0c;这也造就了市场上琳琅满目…

零基础 Ubuntu 20.04.01 下搭建51单片机开发环境[开源编译器SDCC]

原创首发于CSDN&#xff0c;转载请注明出处&#xff0c;谢谢&#xff01; 文章目录为何会在Linux下开发单片机个人系统环境与所用开发板安装开源编译器 sdccSTC MCU ISP 闪存工具 stcgal 的安装单片机代码的编译与测试&#xff5c;编写主代码 main.c&#xff5c;使用 sdcc 编译…

基于龙芯 2K1000 的嵌入式 Linux 系统移植和驱动程序设计

2.1 需求分析 本课题以龙芯 2K1000 处理器为嵌入式系统的处理器&#xff0c;需要实现一个完成的嵌 入式软件系统&#xff0c;系统能够正常启动并可以稳定运行嵌入式 Linux。设计网络设备驱 动&#xff0c;可以实现板卡与其他网络设备之间的网络连接和文件传输。设计 PCIE 设备驱…

新时代下的医疗行业新基建研讨会

1、会议纪要 2023年2月17日&#xff0c;HIT专家网进行了《新时代下的医疗行业新基建研讨会》的会议。 对会议内容进行了记录。 会议中有友谊医院、301、北肿主任进行了分享。大纲如下所示 2、本人所想 本人的所想所感&#xff1a; 1、301在多院区的医疗信息建设&#xff0c…

程序员遇到人生低谷期怎么做?

每个人的一生都是起起伏伏的&#xff0c;你不会天天高潮&#xff0c;总会经历一段又一段的不如意&#xff0c;你怎么把握这一段段时间&#xff0c;如何掌控人生节奏&#xff0c;都源于对人生低谷期的回答。 尤其是2022年&#xff0c;程序员受到的冲击并不小&#xff0c;从年初…

车辆调度混乱?看DHTMLX Gantt 如何提高企业调度管理效率

我们公司有一个车辆调度系统&#xff0c;目前能对小规模车队的进行简单管理。但是随着公司的业务越来越复杂&#xff0c;需要调度的车辆种类和人员安排越来越困难&#xff0c;经常出现因安排不当导致货物无车可送或车辆集中闲置情况发生&#xff0c;非常影响货运效率&#xff0…

谈谈接口和抽象类有什么区别?

第13讲 | 谈谈接口和抽象类有什么区别&#xff1f; Java 是非常典型的面向对象语言&#xff0c;曾经有一段时间&#xff0c;程序员整天把面向对象、设计模式挂在嘴边。虽然如今大家对这方面已经不再那么狂热&#xff0c;但是不可否认&#xff0c;掌握面向对象设计原则和技巧&am…

论文投稿指南——中文核心期刊推荐(法律)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

python小程序课程在线学习平台系统vue

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 JAVA简介 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 SPRINGBOOT框架…

基于Spring Boot的校园志愿者服务网站

文章目录项目介绍主要功能截图&#xff1a;登录个人中心志愿者管理活动类型管理活动报名管理活动心得部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试…

vulnhub LordOfTheRoot_1.0.1

总结&#xff1a;端口敲门&#xff0c;CVE-2015-8660提权&#xff0c; 目录 下载地址 漏洞分析 信息收集 端口敲门 网站分析 方法一 ssh登录提权 方法二 下载地址 LordOfTheRoot_1.0.1.ova (Size: 1.6 GB)Download: http://www.mediafire.com/download/m5tbx0dua05szjm…

【项目精选】百货中心供应链管理系统(论文+源码+视频)

点击下载源码 随着国内物流行业的迅速发展&#xff0c;越来越多的企业认识到了“供应链”一词的含义以及它对整个企业物流活动的重大意义&#xff0c;于是&#xff0c;“供应链管理”也逐渐受到了大家的重视。供应链管理主要涉及到四个领域&#xff1a;供应、生产计划、物流、需…

#Paper Reading# Language Models are Few-Shot Learner

论文题目: Language Models are Few-Shot Learner 论文地址: https://proceedings.neurips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html 论文发表于: NIPS 2020 论文所属单位: OpenAI 论文大体内容 本文主要提出了GPT-3&#xff08;Generative Pre-Tr…

I.MX6ULL_Linux_系统篇(17) uboot分析-启动linux

bootz 启动 Linux 内核 images 全局变量 不管是 bootz 还是 bootm 命令&#xff0c;在启动 Linux 内核的时候都会用到一个重要的全局变量&#xff1a;images&#xff0c; images 在文件 cmd/bootm.c 中有如下定义&#xff1a; images 是 bootm_headers_t 类型的全局变量&…

[Golang实战]github.io部署个人博客hugo[新手开箱可用][小白教程]

[Golang实战]github.io部署个人博客hugo[新手开箱可用][小白教程]1.新手教程(小白也能学会)2.开始准备2.1myBlog是hugo的项目1.安装Hugo2.创建hugo项目2.2 xxxx.github.io是github.io中规定的pages项目3.成功部署4.TODO自动化workflows部署github.io1.新手教程(小白也能学会) …

linux-rockchip-电池相关

可以先安装d-feet&#xff0c;可以查看系统里所有的DBus连接 sudo apt-get install d-feet查看电池的状态&#xff1a; cat /sys/class/power_supply/BAT0/status查看剩余电量百分比&#xff1a; cat /sys/class/power_supply/BAT0/capacity如果有多块电池&#xff0c;查看第…

【Spark分布式内存计算框架——Spark SQL】15. Catalyst 优化器

第九章 Catalyst 优化器 在第四章【案例&#xff1a;电影评分数据分析】中&#xff0c;运行应用程序代码&#xff0c;通过WEB UI界面监控可以看出&#xff0c;无论使用DSL还是SQL&#xff0c;构建Job的DAG图一样的&#xff0c;性能是一样的&#xff0c;原因在于SparkSQL中引擎…

图卷积神经网络分类的pytorch实现

图神经网络(GNN)目前的主流实现方式就是节点之间的信息汇聚&#xff0c;也就是类似于卷积网络的邻域加权和&#xff0c;比如图卷积网络(GCN)、图注意力网络(GAT)等。下面根据GCN的实现原理使用Pytorch张量&#xff0c;和调用torch_geometric包&#xff0c;分别对Cora数据集进行…

Java函数式接口

3 函数式接口 3.1 函数式接口概述 函数式接口&#xff1a;有且仅有一个抽象方法的接口 Java中的函数式编程体现就是Lambda表达式&#xff0c;所以函数式接口就是可以适用于Lambda使用的接口只有确保接口中有且仅有一个抽象方法&#xff0c; Java中的Lambda才能顺利地进行推导…

不容错过!飞桨深度学习与大模型产业应用专场24日等你来!

人工智能教父Hinton曾评价&#xff0c;“深度学习将无所不能”&#xff0c;从聊天机器人、自动驾驶到语音助手&#xff0c;深度学习早已在不知不觉中渗透进我们的生活&#xff0c;而AI大模型又是一项深度学习技术的新突破。深度学习、大模型作为人工智能发展的重要方向&#xf…