我被一个生产错误所扼杀,我将一个不纯的 0 元函数传递给一个错误地期望一个裸结果类型的类。
def impureFunc(): Future[Any] = ???
case class MyService(impureDependency: Future[Any] /* should have been () => Future[Any] */)
实际上,这使得在程序的生命周期内MyService
立即调用impureFunc
并缓存第一个结果,这导致了一个非常微妙的错误。
通常,类型系统可以防止这类错误,但由于能够在没有参数列表的情况下调用 0 元函数,编译器接受了这个程序。
显然,这是 Scala 的一个“特性”,旨在使代码看起来更干净,但这是一个糟糕的陷阱。有没有办法让它成为编译器警告或 linting 错误?换句话说,不赞成“空应用程序”类型的隐式方法转换?