首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将groovy脚本从一个groovy文件包含到另一个groovy文件中

如何将groovy脚本从一个groovy文件包含到另一个groovy文件中
EN

Stack Overflow用户
提问于 2019-04-05 17:36:54
回答 1查看 845关注 0票数 2

我使用groovy脚本中的方法创建了一个定制的dsl命令链。我在从另一个groovy文件访问这个命令链时遇到了问题。有什么方法可以实现这个功能吗?

我试过使用“计算”来加载groovy文件,但是它无法执行命令链。我尝试过使用Groovy类,但是无法调用这些方法。

代码语言:javascript
复制
show = { 
        def cube_root= it
}

cube_root = { Math.cbrt(it) }

def please(action) {
    [the: { what ->
        [of: { n ->
            def cube_root=action(what(n))
                println cube_root;
        }]
    }]
}

please show the cube_root of 1000

这里我有一个CubeRoot.groovy,在其中执行“请显示1000的cube_root”将结果生成为10

我有另一个名为"Main.groovy“的groovy文件。是否有一种方法可以在Main.groovy中直接执行上述命令链,如“请显示1000的cube_root”并获得所需的输出?

Main.groovy

代码语言:javascript
复制
please show the cube_root of 1000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 19:12:58

在groovy/java中没有include操作

你可以用GroovyShell

如果您可以将您的"dsl“表示为闭包,那么例如,这应该可以:

代码语言:javascript
复制
//assume you could load the lang definition and expression from files  
def cfg = new ConfigSlurper().parse( '''
    show = { 
            def cube_root= it
    }

    cube_root = { Math.cbrt(it) }

    please = {action->
        [the: { what ->
            [of: { n ->
                def cube_root=action(what(n))
                    println cube_root;
            }]
        }]
    }  
''' )

new GroovyShell(cfg as Binding).evaluate(''' please show the cube_root of 1000 ''')

另一种方法--使用类加载器。

文件Lang1.groovy

代码语言:javascript
复制
class Lang1{
    static void init(Script s){
        //let init script passed as parameter with variables 
        s.show = { 
           def cube_root= it
        }
        s.cube_root = { Math.cbrt(it) }

        s.please = {action->
            [the: { what ->
                [of: { n ->
                    def cube_root=action(what(n))
                        println cube_root;
                }]
            }]
        }  
    }
}

文件Main.groovy

代码语言:javascript
复制
Lang1.init(this)

please show the cube_root of 1000

并从命令行运行:groovy Main.groovy

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

https://stackoverflow.com/questions/55540716

复制
相关文章

相似问题

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