关于 cats-effect-resource
面向 Scala 的 Cats Effect Resource 技能,专注于管理需要释放的值。它帮助开发者安全组合获取与释放逻辑、限制句柄的生命周期范围,并通过资源工厂构建服务。
主要功能
- 01使用 Resource 管理生命周期
- 02组合资源以构建服务
- 03将已获取句柄限制在 use 范围内
- 04封装 Java AutoCloseable 对象
- 05恰当使用阻塞与可中断操作
适用场景
- 01管理数据库或套接字生命周期
- 02基于依赖资源构建服务
- 03在取消时安全释放资源
- 04设置限定生命周期的测试夹具
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ alexandru/ skills --skill cats-effect-resource安装后在 Claude Code 中输入/cats-effect-resource确认已加载。
附带文件references/resource.mdscripts/verify-examples.scala
详细介绍
Cats Effect Resource(Scala)
快速入门
- 使用
Resource.make、Resource.makeCase或Resource.fromAutoCloseable为每个需要自行管理、可释放的值建模。 - 切勿从
.use返回已获取的句柄;.use完成时会释放该句柄。只返回作用域内计算出的值。 - 类不得在构造函数、字段或顶层
val中分配需要自行管理的资源。使用返回Resource[F, Service]的伴生对象/工厂方法,然后将已获取的私有依赖项传入构造函数。 - 使用
Resource.fromAutoCloseable(Sync[F].blocking(...))或IO.blocking(...)包装 JavaAutoCloseable值。 - 使用
flatMap、mapN、parMapN或辅助构造函数组合资源;负责管理生命周期的 API 应公开Resource[F, A]。 - 请阅读
references/resource.md,了解模式、最佳实践和经过类型检查的示例。
工作流
- 确定每个需要释放或关闭生命周期的值。
- 将获取和释放操作移入
Resource[F, A];在F中延迟副作用(Sync[F].delay/blocking、IO.blocking等)。 - 使用已获取的构造函数参数构建类;将构造逻辑放入返回
Resource的resource/create工厂方法中。 - 在调用
.use之前,将较低层级的资源组合成较高层级的资源。 - 在生命周期边界(IOApp、服务启动、测试夹具)使用
.use运行,并将原始句柄保留在 use 作用域内。 - 仅在确实需要分开获取和释放的互操作场景中使用
allocated,并确保最终化器恰好调用一次。
使用指南
- 当组合和取消安全性很重要时,优先使用
Resource,而不是try/finally或bracket。 - 调用会阻塞的 JVM API 进行获取和释放时,使用
IO.blocking(或Sync[F].blocking)。 - 在
.use内部的使用阶段调用可能阻塞的操作时,优先使用IO.interruptible/Sync[F].interruptible。 - 仅对不拥有最终化器的效果使用
Resource.eval;它不能替代资源获取。 - 每次使用
use都会获取一个新的资源。如果需要共享同一个句柄以执行多个操作,请在一次.use中完成这些操作。 - 对于后台 fiber,使用
Resource、.background或Supervisor,以确保取消时进行清理。 - 添加或更改 Scala 示例时,请更新并编译打包的
scripts/verify-examples.scala脚本。
参考资料
- 加载
references/resource.md,了解 API 详情、模式和示例;代表性检查脚本为scripts/verify-examples.scala。 - Kotlin/Arrow 对应内容请参阅
arrow-resource技能。 - 使用
npx skills add https://github.com/alexandru/skills --skill cats-effect-resource安装此技能。
评论
支持 Markdown