scala对象扩展应用程序不打印任何内容



我正在学习Scala,作为旅程的一部分,我遇到了两种不同的方法来编写您的Scala类-一种是使用主方法,另一种没有主方法,而是通过扩展应用程序(早期的Application由于并发问题而被弃用)。

我正在通过可执行为scala <nameOfScript>.scalascala执行命令行中的脚本。我在Windows中运行Scala2.11.7

使用main方法运行scala脚本/类时,我没有任何问题。

object ObjectWithMainMethod {
    def main(args:Array[String]) = {
            println("Object with a main() method executed..")
    }
}

它产生以下输出。

Object with a main() method executed..

但是,我没有得到它的输出,它扩展了应用程序特性,但没有主方法。

object AppWithoutMainMethod extends App {
    println("AppWithout main() method executed")
}

当我运行这个scala脚本时,它不会打印任何内容。然而,当我通过javap实用程序查看composed.class文件时,我可以看到里面的PSVM(public static void main()方法)。

我是不是错过了什么?如有任何帮助,我们将不胜感激。

如果运行scala -help,您将看到以下注释:

文件参数将作为scala脚本运行,除非它只包含自包含的编译单元(类和对象)和恰好是一个可运行的主方法。在这种情况下,文件将被编译调用了main方法。这提供了脚本和标准之间的桥梁scala源。

这正好解释了您所看到的内容——scala命令主要用于执行"脚本"或一系列表达式——以便快速、交互式地评估代码片段。它只作为"特殊情况"运行"应用程序"(即具有主方法的对象),因为用户会尝试以这种方式使用它是有道理的。因此:

  • 当您运行scala ObjectWithMainMethod.scala时,主方法被识别,并且命令进入这个"特殊情况",弄清楚您可能是想让它以这种方式工作
  • 当您运行scala AppwithoutMainMethod.scala时,即使App有一个main方法,它也不会被识别为"特殊情况",而是被识别为一系列表达式,因此不会调用主方法

如果将类编译到.class文件中,并通过java -cp <classpath> <class-name>命令运行它们,则两者将产生相同的结果。

如果我运行没有.scala扩展名的文件,同样的事情也会发生。我不确定这背后的原因。

scala AppWithoutMainMethod

它产生以下输出

AppWithout main() method executed

相关内容

  • 没有找到相关文章

最新更新