运行 ZIO 应用
ZIOAppDefault
运行 ZIO 应用 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。
从描述到执行
一个 ZIO 值只是一个蓝图。要执行它,您需要将它交给 ZIO 运行时,通常是扩展 ZIOAppDefault,而不是手动调用运行时。
ZIOAppDefault
扩展 ZIOAppDefault 并实现 run。框架会提供默认服务(Console、Clock、Random、System),并管理启动和关闭。
import zio._
object Hello extends ZIOAppDefault {
def run = Console.printLine("Hello, ZIO!")
}run 值
run 是一个环境由默认服务满足的 ZIO。它的错误类型和成功类型都很灵活;运行时会报告失败并设置退出代码。
多步骤应用
使用 for 推导式组合应用逻辑。每一行都是一个由运行时按顺序执行的效果。
import zio._
object Greeter extends ZIOAppDefault {
def run = for {
_ <- Console.printLine("What is your name?")
name <- Console.readLine
_ <- Console.printLine(s"Hello, $name!")
} yield ()
}在 run 中提供层
如果应用依赖自定义服务,请在 run 效果上使用 provide 提供相应的层,以便在执行前完全满足环境需求。
import zio._
object App extends ZIOAppDefault {
// def run = program.provide(MyService.layer)
def run = ZIO.unit
}退出代码
默认情况下,成功的 run 会以代码 0 退出,失败则以非零代码退出。您也可以使用 exitCode 返回明确的 ExitCode。
import zio._
object App extends ZIOAppDefault {
def run = Console.printLine("done").exitCode
}命令行参数
通过 ZIOApp.args 或 getArgs 使用 ZIOAppArgs 访问程序参数,返回一个 Chunk[String]。
import zio._
object App extends ZIOAppDefault {
def run = for {
args <- getArgs
_ <- Console.printLine(s"args: ${args.mkString(", ")}")
} yield ()
}在边界处处理失败
良好的实践是在顶层处理或记录错误,以便运行时打印清晰的消息。在 run 中使用 catchAll 或 tapError。
import zio._
object App extends ZIOAppDefault {
val logic = ZIO.fail("oops")
def run = logic.catchAll(e => Console.printLine(s"Failed: $e"))
}派生纤程
在 run 中,您可以使用 fork 将效果派生到纤程上以实现并发,之后再使用 join 等待它们。运行时会监管所有纤程,并在关闭时中断它们。
import zio._
val prog = for {
fiber <- ZIO.succeed(40).fork
result <- fiber.join
_ <- Console.printLine(s"got $result")
} yield ()手动不安全运行
在 ZIOAppDefault 之外,您可以使用 Unsafe.unsafe 和 Runtime 运行效果,但这仅用于集成边界,不应在常规应用代码中使用。
import zio._
// Unsafe.unsafe { implicit u =>
// Runtime.default.unsafe.run(myEffect).getOrThrow()
// }普通 Scala 主程序
作为对比,这是一个自包含的 Scala 程序入口点。ZIOAppDefault 扮演 main 的角色,同时接入服务、错误报告和纤程监管。
object Main {
def main(args: Array[String]): Unit = {
println("Hello, ZIO!")
}
}快速检查
运行 ZIO 应用的推荐方式是什么?
回顾
您学会了运行 ZIO 应用:
- 使用带有
run效果的ZIOAppDefault - 使用默认服务和层
provide - 处理退出代码、参数和顶层错误
- 派生纤程以及处理不安全边界
您已完成 ZIO 基础课程。
用 AI 导师学习 Scala — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 39
- 课程
- 143
常见问题解答
「运行 ZIO 应用」课时是免费的吗?
是的 — 「运行 ZIO 应用」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。
「运行 ZIO 应用」这节课中我会学到什么?
ZIOAppDefault 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「运行 ZIO 应用」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?
能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。