val askNameFlatMap: ZIO[Console, IOException, Unit] = putStrLn("What is your Name? ") *>
getStrLn.flatMap(name => putStrLn(s"Hello $name"))
val askNameFor: ZIO[Console, IOException, Unit] = {
val getName: ZIO[Console, IOException, String] = getStrLn
for {
_ <- putStrLn("What is your Name? ")
name: String <- getName
_ <- putStrLn(s"Hello $name")
} yield ()
}
使用 flatMap 的版本成功運行,但是當我嘗試運行理解版本時,我收到了這個錯誤
僅當錯誤型別是 NoSuchElementException 的超型別時才支持模式防護。但是,您的效果對于錯誤型別有 java.io.IOException。名稱:字串 <- 獲取名稱
uj5u.com熱心網友回復:
您需要從 name 引數中洗掉型別歸屬。型別歸屬在理解中具有特殊意義。通過說
for
name: String <- getStrLn
它翻譯成類似于getStrLn.withFilter(_.isInstanceOf[String])
withFilter由 ZIO 隱式提供,但前提是錯誤通道允許發出有關丟失元素的信號。基本上你E應該是超型別NoSuchElementException,即Exception或Throwable。你有IOException,這就是為什么它沒有正確解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465617.html
上一篇:如何通過腳本或程式將HTTP請求重定向到我自己計算機中的localhost?
下一篇:如何從Scala貓IO中提取價值
