为什么是例外
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 = on在application.conf文件中设置,我会看到很多输出.
给定案例类,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)
是否有图书馆已经为我做到了?
我知道我可以使用
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 个任务,但如果有更优雅的解决方案,我会更受伤吗?
我想知道是否可以打印包含跨多个页面的 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 的解决方案。任何帮助将不胜感激。
我知道 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效果在很长一段时间内返回空字符串也不会炸毁堆?