首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在-keyword中覆盖“此”GroovyShell

在-keyword中覆盖“此”GroovyShell
EN

Stack Overflow用户
提问于 2014-07-07 08:42:53
回答 1查看 508关注 0票数 1

我试图在java应用程序中使用GroovyShell来执行代码的运行时。代码将用于测试,并将在程序完成后导出到java文件中。为了方便用户,我希望groovy的输入尽可能类似于将要执行的java代码。这意味着,除其他外,当用户试图创建变量以避免私有变量时,I将删除类型。

代码语言:javascript
复制
    String str = "Lorem" 

将作为

代码语言:javascript
复制
    str = "Lorem".

然而,我似乎无法解决的一件事是,在用户通常只需调用方法foo()的情况下,他们现在必须调用对象上的方法。

代码语言:javascript
复制
    Java code {
        foo();
    }

    Groovy code {
        im = new InteractiveMode();
        im.foo();
    }

当然,这是因为foo()方法是在对象this上调用的,它在groovy代码中引用脚本而不是java对象。因此,我的问题是:我是否可以在groovy中以某种方式重写this关键字,或者以其他方式允许在对象上调用方法,而不必每次指定哪个对象?

编辑:澄清

这就是我的代码现在看起来的样子:

代码语言:javascript
复制
InteractiveMode test = new InteractiveMode();
GroovyShell gs = new GroovyShell();
gs.setVariable("im", test);
gs.evaluate("im.foo();");

我希望得到与此相同的输出:

代码语言:javascript
复制
InteractiveMode test = new InteractiveMode();
GroovyShell gs = new GroovyShell();
gs.setVariable("im", test);
//Some groovy magic
gs.evaluate("foo();");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 13:01:38

听起来,在创建CompilerConfiguration时,您需要传入自定义的GroovyShell。然后,您可以按照描述的在这个岗位上设置脚本基类。

如果只需要从脚本中访问一些属性,也可以查看使用绑定的情况。绑定只是属性名称到属性的映射。如果需要,甚至可以设置绑定到闭包,然后像方法一样调用它。在此页顶部附近描述了使用绑定

如果您不想在脚本之外保存状态,那么我将使用绑定。如果您需要在脚本之外保持状态,就像在car示例中一样,那么该post中描述的基类就是您想要的。如果您需要访问共享应用程序状态,则第三个选项是在脚本运行之前简单地设置委托。这是显示在第一个链接的底部附近。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24606389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档