在Python中,通过检查__name__ == '__init__'
是否可以检查if a script is being invoked directly。
在Groovy中有与此等效的东西吗?
答案 0 :(得分:1)
我猜最简单的方法是将当前的类名(使用class.simpleName
)与实际的执行文件脚本名进行比较
这是一个例子:
让我们在M.groovy
文件中创建第一个类:
class M {
static main(args){
def m = new M()
}
def M(){
def thisClass = this.getClass().simpleName
def callingClass = new File(getClass().protectionDomain.codeSource.location.path).name.with{ it.take(it.lastIndexOf('.')) }
println("thisClass: ${thisClass}, callingClass: ${callingClass}")
if (thisClass == callingClass){
println 'Calling from M class...'
} else {
println 'Calling from outside.'
}
}
}
现在来自外部类,例如T.groovy
您可以调用实例化M
类:new M()
。
当您执行M.groovy
时,您会得到:
thisClass: M, callingClass: M
Calling from M class...
,当您运行groovy T.groovy
时,您将获得:
thisClass: M, callingClass: T
Calling from outside.
希望这会有所帮助。