像这样的不完全匹配
(例如模糊匹配)def foo[A](t: Seq[A]) = t match {
Seq(x) => x
}
通常情况下(不总是,但通常是)在我编写的代码中会出现错误,在运行时会崩溃。Scala会发出警告,但在增量构建中,文件可能已经被编译,所以我会错过警告。
是否有一种方法,无论是全局还是局部,也许通过注释,来强制Scala将警告转换为错误?
像这样的不完全匹配
(例如模糊匹配)def foo[A](t: Seq[A]) = t match {
Seq(x) => x
}
通常情况下(不总是,但通常是)在我编写的代码中会出现错误,在运行时会崩溃。Scala会发出警告,但在增量构建中,文件可能已经被编译,所以我会错过警告。
是否有一种方法,无论是全局还是局部,也许通过注释,来强制Scala将警告转换为错误?
scala> @deprecated("","") def f = 8
f: Int
scala> f
<console>:9: warning: method f is deprecated:
f
^
scala> object A {
| def a = {
| @deprecated("","") def _f = f
| _f
| }}
defined object A
scala> A.a
res1: Int = 8
scala> @deprecated("","") def f = 8
f: Int
scala> f
warning: there was one deprecation warning; re-run with -deprecation for details
res0: Int = 8
scala> @deprecated("","") class C { def g = f }; object C extends C
defined class C
defined object C
scala> C.g
res1: Int = 8
@nowarn
以进行本地抑制和-Wconf
以进行全局策略。 - som-snytt考虑询问有关您的构建过程的问题。
在提交/检入代码之前,您应该进行完整的、清洁的构建(而不是增量构建),并立即运行单元测试。这样可以避免 SBT 或您的构建过程中可能存在的错误。当然,您需要监控结果以查找错误和警告。
您是否正在进行自动化、定期的构建/测试(即“持续集成”)?在此期间,您可以对如何处理警告(忽略或触发构建失败/警告)进行一些控制。
我没有看到从 scalac
命令行执行此操作的方法。如果所有其他方法都不能满足您的需求,那么请考虑最后的选择,但只有在适合您的构建工具时才这样做:为 scalac
创建一个包装脚本,也称为 scalac
,它:
scalac
x sliding 2 map { case Seq(a, b) => }
)。 - Owen