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

时间:2011-08-19 14:56:18

标签: scala

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

这个问题与之前的Python问题有同样的问题:
how do I determine whether a python script is imported as module or run as script?
但对于 Scala

4 个答案:

答案 0 :(得分:2)

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

另外,请记住,Scala和Python之间存在差异,这使得这个问题有点没用:在Scala中,代码表达式不能出现在顶层,除非它是Scala脚本。所以你永远不会真的有写一个Scala脚本的模糊性,然后想知道它是否正在以其他方式执行。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

据我所知,Scala没有相应的Python __main__所以不能以同样的方式完成。但我认为你不应该这样做 - 只需为你的模块编写测试或编写一个导入模块的脚本。

答案 3 :(得分:0)

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

def stackTrace: Array[StackTraceElement] =
  try {
    1/0 // cause exception
    Array() //Never executed
  } catch {
    case e: Exception => e.getStackTrace
  }

将完整堆栈跟踪作为StackTraceElement的数组返回。

然而,编写跟踪分析代码将是乏味的,我没有看到任何可能值得它的情况......