例如UIO[Long],ZIO的新版本中的IO和UIO有什么区别IO[Nothing, Long]?
在考虑错误并转换IO[E, T]为 an 之后,IO[Nothing, T]我们可以直接将该值称为类型T而不是IO[Nothing, T]。这允许我们返回一个类型的值而T无需使用var和IO.map。有没有办法做到这一点,如果没有,为什么不呢?
ZIO当前的README中没有找到解决方案。
我想知道 IO Monad 和 Reader monad 之间有什么关系吗?
Reader monad 中的环境可以产生效果吗?如果是这样,ZIO 或 Cats IO、scalaz-effects 如何处理 Reader Monad 原则?
我有一个下一个任务,有 N db 查询(例如 3 - Seq(10,20,30))和迭代计数 = 4。我想使用 ZIO 和下一个:顺序执行迭代和内部迭代评估效果并行。
简化的代码看起来像这样
import zio._
import zio.console._
case class Res(iterNum :Int, dataValue :Int)
val execUnpure :(Int,Int) => Res = (iterNum,dataValue) =>
Res(iterNum, dataValue)
val exec :(Int,Int) => Task[Res] = (iterNum,dataValue) =>
Task.succeed(Res(iterNum, dataValue))
val evalEffectsParallel: (Int, Seq[Int]) => Task[Seq[Res]] =
(iterNum, sqLoadConf) =>
ZIO.collectAllPar(
sqLoadConf.map(lc =>
for {
//here I open NEW db session for this exec.
tr: Res <- exec(iterNum, lc)
} yield tr
)
)
val seqParallelExec: (Int, Seq[Int]) …Run Code Online (Sandbox Code Playgroud) 为什么在 flatMap 中 putStrLn 后跟一个结果语句没有被有效地写入标准输出?
object Mgr extends App {
def main1(args: Array[String]) = getStrLn.flatMap { s =>
putStrLn(s) // Why this did not write to console?
UIO.succeed(s)
}
override def run(args: List[String]): URIO[zio.ZEnv, Int] = main1(Array()).fold(_ => 1,
{ x =>
println(x) // only this line wrote to console, why?
0
})
}
Run Code Online (Sandbox Code Playgroud) 我使用 ZIO 的第一步,我尝试使用兼容的 ZIO 版本转换此 readfile 函数。
下面的代码片段可以编译,但我不会关闭 ZIO 版本中的源代码。我怎么做?
def run(args: List[String]) =
myAppLogic.exitCode
val myAppLogic =
for {
_ <- readFileZio("C:\\path\\to\file.csv")
_ <- putStrLn("Hello! What is your name?")
name <- getStrLn
_ <- putStrLn(s"Hello, ${name}, welcome to ZIO!")
} yield ()
def readfile(file: String): String = {
val source = scala.io.Source.fromFile(file)
try source.getLines.mkString finally source.close()
}
def readFileZio(file: String): zio.Task[String] = {
val source = scala.io.Source.fromFile(file)
ZIO.fromTry[String]{
Try{source.getLines.mkString}
}
}
Run Code Online (Sandbox Code Playgroud) 我是 Scala / ZIO 2 世界的初学者,我正在尝试为一个简单的服务编写一些测试。
所以我有这个方法:
def validate(id: String): ZIO[Any, Throwable, Unit] = {
if (id == "invalid-id") {
ZIO.fail("Invalid id")
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事,但主要是尝试使用isFailure或fails断言:
suite("My suite")(
test("When id is valid") { // This passes
for {
result <- validate("valid-id")
} yield assertTrue(result == ())
},
test("when id is not valid") {
for {
result <- validate("invalid-id")
} yield assertTrue(isFailure(result)) // This doesn't even compile
}
)
Run Code Online (Sandbox Code Playgroud)
如何测试效果失败的情况?
我在用:
Scala: "3.2.1"
zio: "2.0.4"
zio-test: "2.0.5"
Run Code Online (Sandbox Code Playgroud) 看看他们的签名,这些看起来非常相似。ZIO 中这两个函数之间的语义差异是什么\xe2\x80\x99?
\n