使用 zip 获取虚假光纤痕迹并进行理解

Getting a spurious fibre trace with zip and for comprehension

我刚刚开始关注 ZIO 以尝试改进我的 Scala。我已经开始尝试更新我的一些旧代码。我已经包装了一些遗留代码,这些代码 return 是一个包装在选项中的配置,我正在将其转换为 ZIO,然后我将其用于理解。

代码按预期工作,但如果我 return None 我得到:

Fiber failed.
A checked error was not handled.
None

Fiber:Id(1612612180323,1) was supposed to continue to:
  a future continuation at tryzio.MyApp$.run(MyApp.scala:94)
  a future continuation at zio.ZIO.exitCode(ZIO.scala:543)

Fiber:Id(1612612180323,1) execution trace:
  at zio.ZIO$.fromOption(ZIO.scala:3246)
  at tryzio.MyApp$.run(MyApp.scala:93)

对于 SomeNone,代码都按预期工作,但我收到了 None.

的虚假光纤消息

生成这个的代码真的很简单:

def run(args: List[String]) = ({

for {
  cmdln <- ZIO.fromOption(getConfig(args.toArray))
  _ <- putStrLn("Model Data Builder")
  _ <- putStrLn(s"\nVerbose: ${cmdln.verbose}")
  } yield()


}).exitCode

但我显然漏掉了一些明显的东西!我是 ZIO 的新手,所以在解释我的不理解时请使用小词。我需要加入所有纤维吗?我试图抓住 None 然后退出但实际上我的代码从来没有 strops 运行 如果我这样做 - 很奇怪。

.exitCode 捕获到代码中未处理的错误(空配置),在 stdErr 中打印调试信息并以状态 1 退出程序。所以它按预期工作。

我同意错误消息有点误导,应该以与业务相关的内容开头,而不是 fiber failed。 您可能会在 github.

开罚单