微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy - GroovyShell

Summary

  • 执行一个外部的脚本。
  • 如果单独执行一个脚本我们一行一行写就行,如果需要传入参数,返回参数,我们就定义一个 Closure

Demo

import groovy.json.JsonSlurper

class Main {
    static void main(args) {
        def shell = new groovyshell()

        // 要执行的脚本内容,是一行一行的代码,在 shell.evaluate(script) 的时候,就是逐行执行。
        // 如果最后有 return 语句,就可以接收返回结果。
        String script =
        """
        println 'Script!'
        return "222"
        """
        def scriptResult = shell.evaluate(script)


        // 要执行的脚本内容一个 Closure 对象,在执行的时候就返回一个 Closure 对象,
        // 调用该 Closure 对象的 call() 方法获取对应的值。
        String closure =
        """
        { dataMap -> println "Groovy!"; return "返回值"}
        """

        // 返回的是 Script 对象,对象里面是一个 Closure 对象,需要执行才能返回结果。
        def closureResult = shell.evaluate(closure)
        println(closureResult())
    }
}

Demo

package info.aoye

import grails.gorm.transactions.Transactional

@Transactional
class ComponentDemoService {

    static scope = "singleton"

    // 传递过来一个组件对象脚本对象,一个 Object 类型 param
    def evaluate(Component component, Object object) {
        def shell = new groovyshell()
        def closure
        def result

        try
        {
            closure = shell.evaluate(component?.script)
            // 如果不需要参数,就直接执行脚本
            if (!object)
            {
                println("111")
                result = closure
            }
            else
            {
                // 如果是有参数,返回 Closure 对象,这里需要执行一下这个 Closure。
                result = closure(object)
            }
        }
        catch (Exception e)
        {
            println e
            result = e
        }

        return result
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐