我正在使用 Doobie,在我发现的示例中,它使用unsafeRunSync,例如:
sql"select name from country"
.query[String] // Query0[String]
.to[List] // ConnectionIO[List[String]]
.transact(xa) // IO[List[String]]
.unsafeRunSync // List[String]
.take(5) // List[String]
.foreach(println)
Run Code Online (Sandbox Code Playgroud)
在底层,该函数的实现如下:
final def unsafeRunSync(): A = unsafeRunTimed(Duration.Inf).get
Run Code Online (Sandbox Code Playgroud)
在文档中,我发现“请注意,此函数用于测试;它永远不应该出现在您的主线生产代码中!”。我想知道如果它unsafeRunSync在幕后使用这个功能,那么在生产中使用是否可以?
另外,如果不使用,如何设置执行超时unsafeRunTimed?
是否有任何客观原因可以/不在代码中到处使用隐式参数只是为了缩短应该传递的参数数量
我有一个 REST API。端点的每个调用都有一个唯一的 id,应该在调用触发的每个函数中逐字传递以进行调试。消除参数显式传递的第一个想法是使其成为每个函数中的隐式参数。但是,我的直觉告诉我,这是对隐式的误用(尽管我没有明确的论据不这样做)。
这种方法是否可以通过便利推理来证明,其中增益仅删除单个参数并假设对于像我这样的情况是一种很好的做法?
我重新编写了 Java 代码,找到了一个免费端口,我在这里找到了 => https://gist.github.com/vorburger/3429822#file-gistfile1-java以在 Scala 中使用
def findFreePort(): Int = {
var ss: ServerSocket = null
try {
ss = new ServerSocket(0)
ss.getLocalPort
} finally {
ss.close()
}
}
Run Code Online (Sandbox Code Playgroud)
然而,将 var 分配给 看起来非常难看null。有更好的方法吗?