如何确定Scala模块是作为脚本打开还是定期导入?
这个问题与之前的Python问题有同样的问题:
how do I determine whether a python script is imported as module or run as script?
但对于 Scala
答案 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
的数组返回。
然而,编写跟踪分析代码将是乏味的,我没有看到任何可能值得它的情况......