运行某个 Scala 脚本会给出以下警告:
warning: there were 1 deprecation warnings; re-run with -deprecation for details
我怎么做?
是的,我有 RTFM,但它所说的(用 a 分隔编译器参数和其他参数-
)不起作用。
运行某个 Scala 脚本会给出以下警告:
warning: there were 1 deprecation warnings; re-run with -deprecation for details
我怎么做?
是的,我有 RTFM,但它所说的(用 a 分隔编译器参数和其他参数-
)不起作用。
只有 Scala 解释器(用于执行脚本时)支持 shebang 语法 ('#!')。scalac 和 scala REPL 都不支持它。有关问题跟踪,请参见此处。
有关适用于 shebang 的答案,请参见下文。
为了能够在 REPL和解释器中使用文件(也可能作为源代码,例如,如果它是一个有效的类),您应该完全放弃 shebang 标头,并可能添加一个启动器脚本(例如,有一个可执行的 'foo' 启动 'scala foo.scala')。
让我们将 'foo.scala' 定义为以下单行:
case class NoParens // <-- case classes w/o () are deprecated
这将适用于两个解释器:
$ scala foo.scala
...编译器
$ scalac foo.scala
...和REPL:
$ scala -i foo.scala
// or:
$ scala
scala> :load foo.scala
以上所有内容都会给你在你的问题中看到的模糊的弃用警告。
对于通过“scala”可执行文件执行脚本以及通过“scalac”进行编译,您所要做的就是在命令行中添加一个“-deprecation”参数:
$ scala -deprecation foo.scala
// or:
$ scalac -deprecation foo.scala
现在两者都将为您提供详细的弃用警告(“-feature”也是如此)。
REPL 为您提供了 2 个选项:1) 如上所述添加 -deprecation 参数(练习留给读者) 2) 在 REPL 中使用 ':warnings',如下所示:
$ scala -i foo.scala
Loading foo.scala...
warning: there were 1 deprecation warnings; re-run with -deprecation for details
defined class NoParens
Welcome to Scala etc...
scala> :warnings
<console>:7: warning: case classes without a parameter list have been deprecated;
use either case objects or case classes with `()' as parameter list.
case class NoParens // <-- case classes without () are deprecated
^
scala>
不用说,使用 REPL 中的 ':load' 也是如此。
正如所承诺的,这是使用 shebang 语法的秘诀。我自己通常不使用它,所以欢迎评论:
#!/bin/sh
exec scala $0 $@
!#
case class NoParens // <-- case classes w/o () are deprecated
这将为您提供一个神秘的警告:
$ ./foo.scala
warning: there were 1 deprecation warnings; re-run with -deprecation for details
one warning found
要收到您的警告,只需在“exec scala”之后添加一个“-deprecation”,如下所示:
#!/bin/sh
exec scala -deprecation $0 $@
!#
// etc...
这将产生所需的“警告:不推荐使用没有参数列表的案例类”等......
好吧,这大约涵盖了它。360° 弃用 ;-)
将脚本变成应用程序:
#! ... !#
顶部的任何位(这用于 Unix/Mac 上的可执行脚本)object Foo extends App { ... }
然后编译它
scalac -deprecation filename.scala
查看详细的弃用警告。
您收到的警告是编译器错误。Scala 有两个可能从脚本调用的编译器:scalac 和 fsc。查找脚本调用其中之一的位置并编辑编译器调用以包含标志 -deprecation。
例如。
scalac -arg1 -arg2 big/long/path/*.scala other/path/*.scala
变成
scalac -deprecation -arg1 -arg2 big/long/path/*.scala other/path/*.scala