当前位置: 首页 > article >正文

Scala课后总结(2)

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.kler.cn/a/613836.html

相关文章:

  • 内核编程十一:进程的数据结构
  • springboot 实现base64格式wav转码并保存
  • 第 4 章 | Solidity安全 权限控制漏洞全解析
  • GelSight视触觉3D显微系统在透明材料检测中的应用
  • Go红队开发—CLI框架(二)
  • 网络华为HCIA+HCIP 防火墙
  • SpringBoot第一节
  • 当编程语言有了人格
  • HCIP(TCP)(2)
  • 「HTML5+Canvas实战」星际空战游戏开发 - 纯前端实现 源码即开即用【附演示视频】
  • 2025 年中国家电零售与创新趋势解析:以旧换新国补激活需求,AI 技术渗透至研发、供应链、营销
  • 优秀的 React 入门开源项目推荐
  • 蓝桥杯第 12 天 109 国赛第一题 分考场(干了一个小时的题)
  • CSS3学习教程,从入门到精通,CSS3 定位布局页面知识点及案例代码(18)
  • C++类与对象的第一个简单的实战练习-3.24笔记
  • 20250328易灵思FPGA的烧录器FT4232_DL的驱动安装
  • Citus源码(1)分布式表行为测试
  • 【Mac】npm error Error: EACCES: permission denied, mkdir‘/Users/...
  • 第十三届蓝桥杯国赛电子类单片机学习记录(客观题)
  • HCIP笔记整理