scala - 定义ADT时案例对象T和案例类T()的区别?
问题描述
假设在 scala 中我有一个 ADT,如下所示:
sealed trait Animal
object Animal {
case class Lion(name: String) extends Animal
case class Elephant(name:String) extends Animal
case object Tiger extends Animal
}
在这里,最好声明Tiger
为案例对象还是应该声明为空案例类,即case class Tiger()
?一个比另一个有优势吗?
解决方案
如果只有Tiger
它应该是一个对象。如果可以有几个相等Tiger
的 s 它应该是一个类。
val tiger = Tiger()
val tiger1 = Tiger()
tiger == tiger1 // true
tiger eq tiger1 // false
推荐阅读
- ios - 防止这种与 Optional 相关的崩溃的最佳方法是什么?
- javascript - 删除按钮永远不会被触发 onclick
- python - 如何使用 Post 请求从 html 表单将图像文件存储在 Django 中?
- github - 防止 Github Action 工作流在拉取请求上运行
- r - ggplot 美学不适应变量名
- c++ - 子目录中的 CMake 库
- javascript - 基于 URL 的 API 请求/
- pointers - lisp编程中是否有指针?
- amazon-cognito - Auth.currentAuthenticatedUser() 即使在 CUSTOM_AUTH 无密码验证成功后也会抛出“未通过身份验证”
- python - 我想制作一个 Python 程序来使用 Os & Tkinter 安装一个库