我被一个生产错误所困,在那里我将一个不纯的0元函数传递给了一个错误地期望一个裸结果类型的类。
def impureFunc(): Future[Any] = ???
case class MyService(impureDependency: Future[Any] /* should have been () => Future[Any] */)
实际上,这使MyService
立即调用impureFunc
并缓存程序生命周期的第一个结果,这导致了一个非常微妙的错误。
通常,类型系统会阻止这类错误,但由于能够在没有参数列表的情况下调用0-ary函数,编译器会接受此程序。
显然,这是Scala的“功能”,旨在使代码看起来更干净,但这是一个糟糕的问题。有没有办法使这成为编译器警告或linting错误?换句话说,拒绝implicit method conversion的“空应用程序”类型?
答案 0 :(得分:3)
根据此处的评论,此行为似乎是deprecated with a warning in 2.12,并且应该在2.13中成为错误。因此,似乎答案是在升级后使用-deprecation -Xfatal-warnings
。