Scala之旅-统一类型(UNIFIED TYPES)

2024-01-13 07:32

本文主要是介绍Scala之旅-统一类型(UNIFIED TYPES),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Scala 中,所以的值都有类型,包括数值和函数。下图说明了类型层次结构的子集。
这里写图片描述
Scala类型层次结构

Any 是所有类型的父类型,也叫顶层类型。它里面定义了几个确定的方法,例如equalshashcodetoStringAny 有两个直接的子类 AnyValAnyRef
AnyVal 代表值类型,有9种预定义的值类型并且它们都不能为空:Double,Float,Long,Int,Short,Byte,Unit,CharBooleanUnit是不带有意义信息的值类型。确切的说,Unit 实例可以像这样被声明 :()。因为所有的函数都必须返回一些东西,所以有时 Unit 会是很有用的返回类型。
AnyRef 代表引用类型。全部的非值类型都被定义为引用类型。在Scala中用户定义的每个类型都是 AnyRef 的子类型。如果 Scala 运行在Java运行环境中,AnyRef 相当于 java.lang.Object
下面的例子演示了字符串,整数,字符,布尔值和函数,他们和其他对象一样都是对象。

val list: List[Any] = List("a string",732,  // 整数'c',  // 字符true, // 布尔值() => "一个返回字符串的匿名函数"
)
list.foreach(element => println(element))

这里写图片描述
上面代码中定义了一个 List[Any] 类型的list变量,list 被不同类型的元素初始化,但这些元素都是Scala.Any的实例。所以可以将它们添加进 list 中。
可以从上图中看到输出结果中包含了不同的元素类型。

类型转换

值类型可以按照下图箭头指示的方式进行转换。如Char可以转为Int
这里写图片描述
例如:

val x: Long = 987654321
val y: Float = x  // 9.8765434E8 (注意在这个例子中强制转换会导致y丢失精度)
val face: Char = '☺'
val number: Int = face  // 9786

这里写图片描述
强制转换是单向的,以下的例子不会通过编译

val x: Long = 987654321
val y: Float = x  // 9.8765434E8
val z: Long = y  // 不符合规则

这里写图片描述
接下来的章节将介绍如何将引用类型转换为子类型。

Nothing 和 Null

Nothing 是所有类型的子类型,也叫做底部类型。没有 Nothing 类型的值。一个常见的用法是用于发出非终止信号,例如抛出异常、程序退出或者一个死循环(无法计算出值的表达式或是没有正常返回的方法)。
Null 是所有引用类型的子类型(也就是说是AnyRef 的任何子类型)。它是由关键字 null 定义的单个值。null 主要是为了和其它JVM语言的交互而提供的,并且应该永远不要在Scala代码中使用它,我们将在后面探索 null 的替代方法。

这篇关于Scala之旅-统一类型(UNIFIED TYPES)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600671

相关文章

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字