Scala课后总结(2)

news/2025/4/1 8:42:17/

Scala的基本语法

Scala没有基本数据类型与包装类型的区分,统一都是类

类型层次结构

Any  是所有类的超类,处于类型继承结构最底层 。 AnyVal  是值类型的超类,像Byte、Int等数值类型都继承自它; AnyRef  是引用类型的超类,对应Java里的对象引用类型。 Nothing  是所有类型的子类型,可用于表示非正常终止或空值 ; Unit  类似于Java中的  void  ,表示无值。

AnyRef:是Scala中所有引用类型的基类 ,对应Java里对象引用相关类型体系。

AnyVal:是所有值类型的基类 ,像Byte、Int等基本数值类型都继承自它。

Nothing:是所有类的子类,比较特殊,没有实际对象实例,但可用于类型定义。文中示例  scala> def foo = throw new RuntimeException  ,这里  foo  的类型为  Nothing  ,表示该方法会抛出异常非正常结束,没有正常返回值类型。

Null:是所有  AnyRef  的子类 , null  是其唯一对象,用于表示引用类型的空值。

变量定义

强类型语言与弱类型语言对比:以Java作为强类型语言示例,定义变量时需明确指定类型

变量与常量定义: var  用于定义可变变量,值可修改; val  用于定义不可变常量,值不可变,类似于Java中用  final  修饰的变量 。在Scala中鼓励使用  val  来定义变量,增强程序的不可变性和安全性。

基本操作符

算术操作符:Scala的算术操作符+ 、 - 、 * 、 / 、 %  等,以及逻辑操作符  & 、 | 、 ^ 、 >> 、 <<  等,与Java的算术操作符功能类似。但在Scala中,这些操作符本质上是数据类型的方法,例如  1 + 1  等价于  1.+(1)  。还提到  1.to(10)  也可写成  1 to 10  这种中缀表示法。并且Scala没有  ++ 、 --  操作符 ,要实现自增自减需使用  += 、 -=  ,如  num += 1  。

字符串插值操作

插值器介绍:Scala有三个字符串插值器  s 、 f 、 raw  。

s  插值器:在任何字符串前加上  s  ,可在字符串中直接使用变量,如  var name = "tom"; var src = s"hello ${name}"  ,结果  src  为  "hello tom"  。

f  插值器:除具备  s  插值器功能外,还能进行格式化输出,在变量后用  %  指定输出格式 。

raw  插值器:对字面量中的字符不做编码处理,功能与  s  插值器类似 。

 

条件表达式基本形式

单分支和多分支  if - else :Scala中条件表达式有  if (单分支)、 if - else (多分支)两种基本形式。

支持混合类型表达式

Scala的条件表达式支持混合类型表达式,如  val z = if (x > 1) 1 else "error"  ,当  x > 1  时  z  为  1  (整数类型),否则为  "error"  (字符串类型),此时  z  的类型被推断为  Any  ,它是  Int  和  String  的父类 。

缺失  else  情况

如果  if  表达式缺失  else  部分,相当于  if (x > 2) 1 else ()  ,这里  ()  对应Scala中的  Unit  类,类似于Java中的  void  。

表达式都有值

在Scala中每个表达式都有值,像  val n = if (x > 2) 1 else ()  , n  的类型为  AnyVal  ,值根据条件判断可能是  1  或  ()  。

当条件表达式的结果类型可能为多种时,类型会被推断为合适的父类。如  val y = if(1>1) 1 else "error"  , y  的类型为  Any  ,因为结果可能是  Int  或  String  ;若  val y = if(x>1) 1  (没有  else  部分), y  的类型为  AnyVal  ,默认  else  部分为  ()  。

 


http://www.ppmy.cn/news/1584156.html

相关文章

机器学习算

1 KMeans聚类 什么是聚类任务 1 无监督机器学习的一种 2 目标将已有数据根据相似度划分到不同的簇 3 簇内样本彼此之间越相似&#xff0c;不同簇的样本之间越不相似&#xff0c;就越好 为什么叫KMeans聚类 1 也可以叫K均值聚类 2 K是最终簇数量&#xff0c;它是超参数&a…

SvelteKit 最新中文文档教程(13)—— Hooks

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

基于单片机的仓库安防系统(论文+源码)

1 需求分析 仓库由于存有大量物品&#xff0c;因此对仓库的监控非常重要&#xff0c;目前仓库已经普遍装有安防系统&#xff0c;以保证仓库的安全&#xff0c;本次基于单片机的仓库安防系统设计&#xff0c;在功能上设计如下&#xff1a; 用户可通过IC卡进入仓库&#xff1b;系…

HTML输出流

HTML 输出流 JavaScript 中**「直接写入 HTML 输出流」**的核心是通过 document.write() 方法向浏览器渲染过程中的数据流动态插入内容。以下是详细解释&#xff1a; 一、HTML 输出流的概念 1. 动态渲染过程 HTML 文档的加载是自上而下逐行解析的。当浏览器遇到 <script&…

Unity3D ECS架构设计解析

前言 Unity3D 的 ECS&#xff08;Entity-Component-System&#xff09;架构是一种以数据驱动为核心的开发模式&#xff0c;通过将游戏对象分解为实体&#xff08;Entity&#xff09;、组件&#xff08;Component&#xff09;和系统&#xff08;System&#xff09;&#xff0c;…

性能测试理论基础-测试流程及方案设计要点

需求调研 因性能测试技术性和专业性要求比较高,通常需要性能测试人员参与需求调研和确认。 需求调研阶段,通常需要确认以下信息: 项目背景、测试范围、业务逻辑 & 数据流转(与开发确认)、系统架构、软硬件配置信息、 测试数据量(量级要一致)、外部依赖(第三方系统…

python面试-基础

Python 面试题&#xff1a;解释 filter 函数的工作原理 难度: ⭐⭐ 特点: filter 函数是 Python 内置的高阶函数&#xff0c;用于过滤序列中的元素。这道题考察面试者对函数式编程概念的理解以及对 filter 函数的实际应用能力。和 map 函数类似, Python 3 中的 filter 返回一…

新能源智慧灯杆是否支持新能源汽车充电功能?

哇哦&#xff01;你是否想象过&#xff0c;在街头巷尾普通的灯杆&#xff0c;竟能摇身一变&#xff0c;成为为新能源汽车充电的强大能量站&#xff1f;没错&#xff0c;这就是叁仟新能源智慧灯杆&#xff01;它不仅外观时尚&#xff0c;更具备超厉害的新能源汽车充电功能&#…