小编Mat*_*ger的帖子

为什么Akka Streams吞噬了我的异常?

为什么是例外

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Source

object TestExceptionHandling {
  def main(args: Array[String]): Unit = {
    implicit val actorSystem = ActorSystem()
    implicit val materializer = ActorMaterializer()(defaultActorSystem)

    Source(List(1, 2, 3)).map { i =>
      if (i == 2) {
        throw new RuntimeException("Please, don't swallow me!")
      } else {
        i
      }
    }.runForeach { i =>
      println(s"Received $i")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

默默地忽略了?我可以看到流在打印后停止Received 1,但没有记录任何内容.请注意,问题通常不是日志记录配置,因为如果我akka.log-config-on-start = onapplication.conf文件中设置,我会看到很多输出.

scala exception-handling akka-stream

18
推荐指数
2
解决办法
5963
查看次数

如何使用Shapeless提取字段名称?

给定案例类,A我可以使用以下代码段使用Shapeless提取其字段名称:

val fieldNames: List[String] = {
  import shapeless._
  import shapeless.ops.record.Keys

  val gen = LabelledGeneric[A]
  val keys = Keys[gen.Repr].apply
  keys.toList.map(_.name)
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但是我如何以更通用的方式实现它,以便可以方便地将这种技术用于任意类,例如

val fields: List[String] = fieldNames[AnyCaseClass]
Run Code Online (Sandbox Code Playgroud)

是否有图书馆已经为我做到了?

scala shapeless

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

如何优雅地与 ZIO 并行执行多种效果

我知道我可以使用

import zio.Task

def zip3Par[A, B, C](a: Task[A], b: Task[B], c: Task[C]): Task[(A, B, C)] =
  a.zipPar(b).zipWithPar(c) { case ((a, b), c) => (a, b, c) }

def zip4Par[A, B, C, D](a: Task[A], b: Task[B], c: Task[C], d: Task[D]): Task[(A, B, C, D)] =
  zip3Par(a, b, c).zipWithPar(d) { case ((a, b, c), d) => (a, b, c, d) }
Run Code Online (Sandbox Code Playgroud)

并行执行 3 或 4 个任务,但如果有更优雅的解决方案,我会更受伤吗?

scala scalaz zio

6
推荐指数
2
解决办法
1575
查看次数

如何打印包含多页的 IFRAME?

我想知道是否可以打印包含跨多个页面的 IFRAME 的 HTML 页面。由于某种原因,浏览器会在第一页之后不断截断 IFRAME。这是一个演示上述问题的简约示例。首先,这是一个简单的 HTML 页面,其中包含应针对打印进行优化的 IFRAME:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>TEST</title>

    <style>
        html, body {
            height: 100%;
        }

        iframe {
            width: 100%;
            height: 100%;
        }
    </style>

  </head>
  <body>
    <iframe src="iframe-content.html">
    </iframe>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是我要嵌入的页面:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>TEST-CONTENT</title>

  </head>
  <body>
    <p>
      Some very, very long text spawning multiple pages.
    </p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

使用 JavaScript 不是一个选择。我正在寻找一种仅使用 CSS 的解决方案。任何帮助将不胜感激。

css printing iframe

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

如何在 ZIO 中实现不使用潜在大量堆空间的循环

我知道 ZIO 维护自己的堆栈,即zio.internal.FiberContext#stack,它保护递归函数,如

def getNameFromUser(askForName: UIO[String]): UIO[String] =
  for {
    resp <- askForName
    name <- if (resp.isEmpty) getNameFromUser(askForName) else ZIO.succeed(resp)
  } yield name
Run Code Online (Sandbox Code Playgroud)

从堆栈溢出。然而,它们仍然消耗 ZIO 解释器堆栈中的空间,这可能导致OutOfMemoryError非常深的递归。你将如何重写getNameFromUser上面的函数,即使askForName效果在很长一段时间内返回空字符串也不会炸毁堆?

scala zio

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