Java 如何确定脚本引擎中运行的 Groovy 代码中是否存在变量?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/42465028/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 00:10:18  来源:igfitidea点击:

How can I determine if a variable exists from within the Groovy code running in the Scripting Engine?

javajenkinsgroovyscriptingjava-scripting-engine

提问by ycomp

How can I determine if a variable exists from within the Groovy code running in the Scripting Engine?

如何确定脚本引擎中运行的 Groovy 代码中是否存在变量?

The variable was put by ScriptEngine's put method

变量是由ScriptEngine 的 put 方法放置的

采纳答案by Aliaksandr Pyrkh

In the groovy.lang.Scriptthere is a method public Binding getBinding(). See also groovy.lang.Bindingwith method public boolean hasVariable(String name).

groovy.lang.Script 中有一个方法public Binding getBinding()。另见groovy.lang.Bindingwith method public boolean hasVariable(String name)

Thus you can simple check variable existence like

因此,您可以简单地检查变量是否存在,例如

if (binding.hasVariable('superVariable')) {
// your code here
}

回答by Valdi_Bo

Variables injected by the Scripting Engine are held within binding.variables, so you can e.g. check for variable named xx:

脚本引擎注入的变量保存在 中 binding.variables,因此您可以例如检查名为 的变量xx

if (binding.variables["xx"]) ...

回答by Maximilian Mordig

// Example usage: defaultIfInexistent({myVar}, "default")
def defaultIfInexistent(varNameExpr, defaultValue) {
    try {
        varNameExpr()
    } catch (exc) {
        defaultValue
    }
}