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" |
| |
| |
| 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 |
| { |
| |
| result = closure(object) |
| } |
| } |
| catch (Exception e) |
| { |
| println e |
| result = e |
| } |
| |
| return result |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?