首先,你不能拥有
=
a的第一行是为了便于理解。你需要把你的纯粹价值包裹起来
ZIO.succeed
或者把它放在理解之外。
“Hello”是一个纯字符串。您可以使用
ZIO.effectTotal
但从技术上讲,它不会产生任何副作用,所以你也应该使用
succeed
在这里。
retry
失败时重试,但
effectTotal
/
成功
不能失败。您应该使用
repeat
相反。
import zio._
import zio.duration._
object MyApp extends zio.App {
def run(args: List[String]) =
myAppLogic.exitCode
val myAppLogic =
for {
sequential <- ZIO.succeed(Schedule.recurs(10) andThen Schedule.spaced(1.second))
_ <- ZIO.succeed("hello").repeat(sequential)
} yield ()
}
现在,修复了错误后,它仍然不会显示您的文本,因为您只是在生成值(不是副作用)而没有打印它们(副作用)。
正确的代码应该是这样的:
import zio._
import zio.duration._
import zio.console._
object MyApp extends zio.App {
def run(args: List[String]) =
myAppLogic.exitCode
//leave this out of the for-comprehension
val sequential = Schedule.recurs(10) andThen Schedule.spaced(1.second)
val myAppLogic = putStrLn("hello").repeat(sequential)
// Or you could suspend the `println` side effect with `effectTotal` (doesn't fail but produces side effects)
// val myAppLogicAlt = ZIO.effectTotal(println("hello")).repeat(sequential)
}