运行某个Scala脚本会发出此警告:
warning: there were 1 deprecation warnings; re-run with -deprecation for details
我该怎么做?
是的,我有RTFM,但它所说的(将编译器参数和其他参数与-
分开)不起作用。
答案 0 :(得分:3)
只有Scala解释器(用于执行脚本时)支持shebang语法('#!')。 scalac和scala REPL都不支持它。有关问题跟踪,请参阅here。
请参阅下文,了解适用于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°弃用; - )
答案 1 :(得分:2)
将脚本转换为应用程序:
#! ... !#
位(这用于Unix / Mac上的可执行脚本)object Foo extends App { ... }
然后用
编译它scalac -deprecation filename.scala
查看详细的弃用警告。
答案 2 :(得分:-1)
您收到的警告是编译错误。 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