5

我被一个生产错误所扼杀,我将一个不纯的 0 元函数传递给一个错误地期望一个裸结果类型的类。

def impureFunc(): Future[Any] = ???

case class MyService(impureDependency: Future[Any] /* should have been () => Future[Any] */)

实际上,这使得在程序的生命周期内MyService立即调用impureFunc并缓存第一个结果,这导致了一个非常微妙的错误。

通常,类型系统可以防止这类错误,但由于能够在没有参数列表的情况下调用 0 元函数,编译器接受了这个程序。

显然,这是 Scala 的一个“特性”,旨在使代码看起来更干净,但这是一个糟糕的陷阱。有没有办法让它成为编译器警告或 linting 错误?换句话说,不赞成“空应用程序”类型的隐式方法转换

4

1 回答 1

3

从这里的评论来看,这种行为似乎在 2.12 中已被弃用并带有警告,并且应该在 2.13 中成为错误。所以看来答案是-deprecation -Xfatal-warnings升级后使用。

于 2017-09-19T23:16:57.020 回答