期货在我的代码中执行,没有被检测到。
def f(): Future[String] = {
functionReturningFuture() // How to detect this?
Future("")
}
理想情况下,静态分析工具将有助于检测这一点。
你可以越接近WartRemover NonUnitStatements
疣,但它不能只错误Future
语句而跳过所有其他语句。
您遇到此类问题的事实可以用作反对使用Future
并将其替换为一些 IO 的论据:猫的IO
、莫尼克斯的Task
或 Scalaz Z IO
。当涉及到它们时,您首先构建管道,然后运行它。如果你省略了IO
值作为回报,并且你没有以任何其他方式(flatMap
、map2
、for
理解等(将其组合成结果,它就不会被执行 - 它仍然存在,但不会造成伤害。
如果你想在Future
上拥有更大的控制和错误,你可能不得不编写你自己的WartRemover的疣或ScalaFix规则。