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

Scala:case class(通俗易懂版)

1. case class 是什么?

想象你要做一个表格,比如学生信息表,每一行需要填:姓名、年龄、成绩
在代码里,这种“表格的一行”就是一个数据对象,case class 就是帮你快速创建这种“表格行”的工具。

普通方法(麻烦版):
你要自己写很多代码定义“学生”的类,还要写各种方法(比如打印信息、比较是否相同等),麻烦!

用 case class(省事版):
你只需要写一行代码,剩下的(打印信息、比较等)自动生成!

scala复制代码

// 定义一个“学生”模板(包含姓名、年龄、成绩)
case class Student(name: String, age: Int, score: Double)// 创建具体的学生对象(不用写 new!)
val alice = Student("Alice", 20, 95.5)  // 自动生成!
val bob = Student("Bob", 22, 88.0)

2. case class 有啥好处?

① 直接拿数据,不用写 new

scala复制代码

// 普通类必须写 new
class Animal(name: String)
val cat = new Animal("Tom")// case class 不用写 new!自动创建对象
case class Animal(name: String)
val dog = Animal("Buddy")  // 自动帮你 new!
② 自动生成“打印信息”

scala复制代码

// 普通类打印是看不懂的地址
println(cat)  // 输出:Animal@4e50df2e// case class 打印具体数据
println(dog)  // 输出:Animal(Buddy)
③ 自动比较内容是否相同

scala复制代码

val dog1 = Animal("Buddy")
val dog2 = Animal("Buddy")// 普通类比较地址,不同
println(cat == new Animal("Tom"))  // false// case class 比较内容,相同!
println(dog1 == dog2)  // true
④ 模式匹配超方便(拆开数据用)

scala复制代码

def checkStudent(student: Student): String = student match {case Student("Alice", 20, _) => "这是Alice,年龄20!"case Student(_, age, score) if score < 60 => "不及格!"case _ => "其他学生"
}println(checkStudent(alice))  // 输出:这是Alice,年龄20!

3. 什么时候用 case class

  • 当你的类主要是用来装数据的时候(比如学生信息、订单信息)。
  • 当你需要快速比较、打印、复制数据的时候。
  • 当你想用模式匹配拆解数据的时候。

4. 超简单总结

  • case class = 自动生成的数据盒子
    (帮你省掉写一堆代码的麻烦,还能方便拆开用)
  • 常用在:数据存储、模式匹配、传输消息(比如聊天消息)。

动手试试! 你可以在代码里写一个 case class,体验它的方便之处。例如:

scala复制代码

case class Book(title: String, price: Double)
val myBook = Book("Scala入门", 39.9)
println(myBook)  // 试试打印结果!
http://www.lryc.cn/news/547481.html

相关文章:

  • Vue、React、原生小程序的写法对比差异
  • 【AIGC系列】6:HunyuanVideo视频生成模型部署和代码分析
  • java 初学知识点总结
  • Android MVC、MVP、MVVM三种架构的介绍和使用。
  • AI视频领域的DeepSeek—阿里万相2.1图生视频
  • IDEA 2024.1.7 Java EE 无框架配置servlet
  • STM32---FreeRTOS中断管理试验
  • 深色系B端系统界面,在何种场景下更加适合?
  • 如何使用 Python+Flask+win32print 实现简易网络打印服务1
  • 深度学习DNN实战
  • 课程3. 分批训练与数据规范、标准化
  • 《机器学习数学基础》补充资料:过渡矩阵和坐标变换推导
  • linux指令学习--sudo apt-get install vim
  • 类和对象—多态—案例2—制作饮品
  • 嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)
  • 计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)
  • 前端开发10大框架深度解析
  • Mybatis 的关联映射(一对一,一对多,多对多)
  • 深度解码!清华大学第六弹《AIGC发展研究3.0版》
  • /dev/console文件详解
  • ProfibusDP主站转ModbusTCP网关如何进行数据互换
  • springboot3 WebClient
  • 牛客周赛 Round 83
  • 硬通货用Deekseek做一个Vue.js组件开发的教程
  • Windows权限维持之利用安全描述符隐藏服务后门进行权限维持(八)
  • Ubuntu20.04双系统安装及软件安装(七):Anaconda3
  • 【极光 Orbit•STC8A-8H】02. STC8 单片机工程模板创建
  • Spring Boot WebFlux 中 WebSocket 生命周期解析
  • PostgreSQL中的事务隔离
  • 基于Rye的Django项目通过Pyinstaller用Github工作流简单打包