标签: zio

scalaz ZIO中IO和UIO之间的区别

例如UIO[Long],ZIO的新版本中的IO和UIO有什么区别IO[Nothing, Long]

scala scalaz zio

2
推荐指数
1
解决办法
248
查看次数

在 ZIO 中,有没有办法将 IO[Nothing, T] 转换为 T,如果没有,为什么不呢?

在考虑错误并转换IO[E, T]为 an 之后,IO[Nothing, T]我们可以直接将该值称为类型T而不是IO[Nothing, T]。这允许我们返回一个类型的值而T无需使用varIO.map。有没有办法做到这一点,如果没有,为什么不呢?

ZIO当前的README中没有找到解决方案。

scala scalaz zio

1
推荐指数
1
解决办法
1193
查看次数

IO Monad 与 Reader Monad

我想知道 IO Monad 和 Reader monad 之间有什么关系吗?

Reader monad 中的环境可以产生效果吗?如果是这样,ZIO 或 Cats IO、scalaz-effects 如何处理 Reader Monad 原则?

scalaz scala-cats cats-effect zio

1
推荐指数
1
解决办法
699
查看次数

ZIO IO.collectAll 和 ZIO.collectAllPar 在一起

我有一个下一个任务,有 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)

scala zio

1
推荐指数
1
解决办法
828
查看次数

为什么zio的putStrLn没有输出

为什么在 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)

scala zio

1
推荐指数
1
解决办法
286
查看次数

如何在ZIO中执行try and catch?

我使用 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)

io scala zio

1
推荐指数
1
解决办法
581
查看次数

使用 ZIO2 和 zio-test 断言效果失败

我是 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)

我尝试了几件事,但主要是尝试使用isFailurefails断言:

 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)

scala zio zio-test

1
推荐指数
1
解决办法
535
查看次数

在ZIO中,flatMap和zipRight有什么区别?

看看他们的签名,这些看起来非常相似。ZIO 中这两个函数之间的语义差异是什么\xe2\x80\x99?

\n

scala zio

0
推荐指数
1
解决办法
165
查看次数

标签 统计

zio ×8

scala ×7

scalaz ×3

cats-effect ×1

io ×1

scala-cats ×1

zio-test ×1