如何使用-deprecation重新运行scala脚本?

时间:2013-04-24 08:54:42

标签: scala

运行某个Scala脚本会发出此警告:

warning: there were 1 deprecation warnings; re-run with -deprecation for details

我该怎么做?

是的,我有RTFM,但它所说的(将编译器参数和其他参数与-分开)不起作用。

3 个答案:

答案 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'也是如此。

将'-preprecation'与'#!'

一起使用

正如所承诺的,这是一个使用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)

将脚本转换为应用程序:

  1. 删除顶部的任何#! ... !#位(这用于Unix / Mac上的可执行脚本)
  2. 将所有内容包裹在object Foo extends App { ... }
  3. 然后用

    编译它
    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