使用对象外部的语句运行Scala脚本

使用对象外部的语句运行Scala脚本,scala,Scala,myfile.scala的内容如下: // println("print this line") object myObj { def main(args: Array[String]): Unit = { println("Hello, world!") } } 如果我运行:scala myfile.scala,它将打印:Hello,world 如果我取消对第一个println stmt的注释,并运行:scala myfi

myfile.scala
的内容如下:

//  println("print this line")

object myObj  {
        def main(args: Array[String]): Unit = {
                println("Hello, world!")
        }
}
如果我运行:
scala myfile.scala
,它将打印:
Hello,world

如果我取消对第一个println stmt的注释,并运行:
scala myfile.scala
, 它只打印:
打印此行
, 并且不打印hello world stmt


为什么会这样?我觉得很困惑。我试图搜索归档文件,但找不到任何答案。

当scala命令在文件中看到顶级语句(不在类或对象中)时,它会将文件作为脚本运行,从第一行开始向下移动。您永远不会调用main方法,因为您永远不会调用它,只需定义它即可。当您的文件不包含任何顶级语句但包含主对象时,它将运行main方法作为程序的入口点。

当scala命令在文件中看到顶级语句(不在类或对象中)时,它将作为脚本运行文件,从第一行开始向下移动。您永远不会调用main方法,因为您永远不会调用它,只需定义它即可。当您的文件不包含任何顶级语句,但确实包含一个主对象时,它将运行main方法作为程序的入口点。

这个问题与oo或函数式编程无关。这是一个公平的问题,但标题完全无关。实现这一点的简单方法是使用myObj extend App。这基本上将对象的全部内容视为
main
。您可以参考以下问题来启动应用程序。这是一个公平的问题,但标题完全不相关。实现这一点的一个简单方法是使用myObj extend应用程序。这基本上将对象的全部内容视为
main
。您可以参考以下问题来启动应用程序。公平的问题是,没有什么值得邀请的-1