在 groovy 中覆盖异或
overwrite xor in groovy
我正在寻找一种方法来覆盖 groovy 脚本上的 xor。
我已经为我的脚本创建了一个基础 class,其中定义了一个对象。该对象已经有一个方法 public Object xor(String var)
,其工作方式类似于 myobject^"foo"
。我想要的是像 myobject^foo
这样访问此方法的方法,其中 foo 像普通字符串一样处理。
据我所知,您想以某种方式做到这一点
(myobject^"foo") == (myobject^foo)
因此,在您的脚本中您可以重新定义方法 getProperty() 因此在您的脚本中访问 foo 属性 将 return "foo" string..
class A{
public Object xor(Object o){
println "xor $o"
return o
}
}
public getProperty(String key){
if(key in ['out'])return super.getProperty(key) //skip standard properties
return key
}
def myobject=new A()
assert (myobject^foo) == (myobject^"foo")
但我没有看到任何好处:)
根据@daggett 的回答,我找到了一种处理缺失属性的方法:
public abstract class MyBaseScript extends Script implements GroovyObject {
protected class A {
public Object xor(String var) {
//do fancy stuff
return var;
}
}
protected A foo = new A();
//method which handles missing properties
public Object propertyMissing(String name) {
return name;
}
}
如何启动我的脚本:
Binding binding = new Binding();
// passing parameters
binding.setVariable("arg0", arg0);
binding.setVariable("args", arg1);
// Compiler Config
CompilerConfiguration cc = new CompilerConfiguration();
ImportCustomizer ic = new ImportCustomizer();
// add some imports for e.g.
ic.addImports("java.awt.Color", "java.util.Calendar",...);
cc.addCompilationCustomizers(ic);
// set BaseClass
cc.setScriptBaseClass("de.MyBaseScript");
// execute script
GroovyClassLoader loader = new GroovyClassLoader();
shell = new GroovyShell(loader, binding, cc);
Script gscript = shell.parse(groovyScriptAsAFile);
Object o = gscript.run();
我正在寻找一种方法来覆盖 groovy 脚本上的 xor。
我已经为我的脚本创建了一个基础 class,其中定义了一个对象。该对象已经有一个方法 public Object xor(String var)
,其工作方式类似于 myobject^"foo"
。我想要的是像 myobject^foo
这样访问此方法的方法,其中 foo 像普通字符串一样处理。
据我所知,您想以某种方式做到这一点
(myobject^"foo") == (myobject^foo)
因此,在您的脚本中您可以重新定义方法 getProperty() 因此在您的脚本中访问 foo 属性 将 return "foo" string..
class A{
public Object xor(Object o){
println "xor $o"
return o
}
}
public getProperty(String key){
if(key in ['out'])return super.getProperty(key) //skip standard properties
return key
}
def myobject=new A()
assert (myobject^foo) == (myobject^"foo")
但我没有看到任何好处:)
根据@daggett 的回答,我找到了一种处理缺失属性的方法:
public abstract class MyBaseScript extends Script implements GroovyObject {
protected class A {
public Object xor(String var) {
//do fancy stuff
return var;
}
}
protected A foo = new A();
//method which handles missing properties
public Object propertyMissing(String name) {
return name;
}
}
如何启动我的脚本:
Binding binding = new Binding();
// passing parameters
binding.setVariable("arg0", arg0);
binding.setVariable("args", arg1);
// Compiler Config
CompilerConfiguration cc = new CompilerConfiguration();
ImportCustomizer ic = new ImportCustomizer();
// add some imports for e.g.
ic.addImports("java.awt.Color", "java.util.Calendar",...);
cc.addCompilationCustomizers(ic);
// set BaseClass
cc.setScriptBaseClass("de.MyBaseScript");
// execute script
GroovyClassLoader loader = new GroovyClassLoader();
shell = new GroovyShell(loader, binding, cc);
Script gscript = shell.parse(groovyScriptAsAFile);
Object o = gscript.run();