简体   繁体   English

如何从 Scala 猫 IO 中提取值

[英]How to extract value from Scala cats IO

I need to get Array[Byte] value from ioArray which is IO[Array[Byte]] // IO is from cats library我需要从 ioArray 中获取 Array[Byte] 值,即 IO[Array[Byte]] // IO 来自 cats 库

  object MyTransactionInputApp extends App{

     val ioArray : IO[Array[Byte]] = generateKryoBinary()
  

     val i : Array[Byte] = ioArray.unsafeRunSync();

      println(i)

  def generateKryoBinaryIO(transaction: Transaction): IO[Array[Byte]] = {
    KryoSerializer
      .forAsync[IO](kryoRegistrar)
      .use { implicit kryo =>
          transaction.toBinary.liftTo[IO]
      }
  }

  def generateKryoBinary(): IO[Array[Byte]] =  {
    val transaction = new Transaction(Hash(""),"","","","","")
    val ioArray =  generateKryoBinaryIO(transaction);
    return ioArray
  }

}

I tried the below, but not working我试过下面的,但没有工作

 val i : Array[Byte] = for {
    array <- ioArray
  } yield array

If you just started working with cats-effect I recommend reading about cats.effect.IOApp which runs your IO .如果您刚开始使用 cats-effect,我建议您阅读运行cats.effect.IOApp的 cats.effect.IOApp

Otherwise simple solutions would be:否则简单的解决方案是:

  1. run it explicitly and get the result:显式运行它并得到结果:
import cats.effect.unsafe.implicits.global

ioArray.unsafeRunSync()
  1. or maybe work with Future :或者与Future一起工作:
import cats.effect.unsafe.implicits.global

ioArray.unsafeToFuture()

Could you give us more context about your application?你能给我们更多关于你的申请的背景吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM