zoukankan      html  css  js  c++  java
  • Groovy

    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
        }
    }
  • 相关阅读:
    五步搞定Android开发环境部署!
    WebBrowser JS回调delphi的方法 (简单通用)
    Delphi根据方法名调用方法
    Delphi TstringList Stringlist的特殊用法
    delphi 获取webbrowser的cookies给Idhttp用
    HttpHelper类登录淘宝联盟并下载淘宝客订单xls
    我的常用笔记(GetAndroid,ADBDemo,GetSJ,GetTB)
    P1025 数的划分
    P1969 积木大赛
    P2038 无线网络发射器选址
  • 原文地址:https://www.cnblogs.com/duchaoqun/p/13163431.html
Copyright © 2011-2022 走看看