如何确定scala模块是否作为脚本运行

如何确定scala模块是否作为脚本运行,scala,Scala,如何确定Scala模块是作为脚本打开还是定期导入 这个问题与前面的Python问题相同: 但是就我所知,Scala没有Python的\uuuu main\uuuuu的等价物,所以不能用同样的方法来实现。但我认为你无论如何都不应该这样做——只需为你的模块编写测试或编写一个导入模块的脚本。如果你只是需要一个供个人使用的快速破解,你可以用一个shell脚本启动Scala解释器,该脚本还设置一个环境变量,指示解释器正在运行 另外,请记住,Scala和Python之间存在差异,这使得这个问题有些没有意义

如何确定Scala模块是作为脚本打开还是定期导入

这个问题与前面的Python问题相同:


但是就我所知,Scala没有Python的
\uuuu main\uuuuu
的等价物,所以不能用同样的方法来实现。但我认为你无论如何都不应该这样做——只需为你的模块编写测试或编写一个导入模块的脚本。

如果你只是需要一个供个人使用的快速破解,你可以用一个shell脚本启动Scala解释器,该脚本还设置一个环境变量,指示解释器正在运行


另外,请记住,Scala和Python之间存在差异,这使得这个问题有些没有意义:在Scala中,代码表达式不能出现在顶层,除非它是Scala脚本。因此,编写Scala脚本,然后想知道它是否以其他方式执行,你永远不会有这种模棱两可的感觉。

一种肮脏的黑客行为可能是抛出异常并获取跟踪。然后,您可以检查它以尝试猜测上下文。例如,以下方法:

def stackTrace: Array[StackTraceElement] =
  try {
    1/0 // cause exception
    Array() //Never executed
  } catch {
    case e: Exception => e.getStackTrace
  }
将以数组形式返回完整堆栈跟踪


然而,编写跟踪分析代码将是一件乏味的事情,我看不出有任何值得的情况……

所有Scala模块都是定期导入的,因为没有像脚本一样打开的东西。

我不知道为什么会有反对票。谢谢,我从未注意到这种方法。