You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅使用evaluate方法在Groovy主脚本中引入其他脚本的类并实例化

解决方案

方案1:直接实例化evaluate加载的类

Groovy中使用evaluate执行外部脚本后,脚本内定义的类会自动被当前脚本的上下文识别,不需要额外导入操作,直接实例化即可使用:

File csvFile = new File("./Csvreader.groovy");
evaluate(csvFile);
// 直接实例化加载完成的CSVReader类
def csvReader = new CSVReader()
// 按需调用类方法
csvReader.setSeperator(",")
csvReader.readCsv()
// 测试类方法调用示例
println csvReader.getHeaders()
println csvReader.getSize()
println csvReader.getLine("user_id", "1001")

方案2:移出类封装,调用evaluate时传递参数

如果不需要保留类结构,可以将逻辑直接写在被调用的Groovy脚本中,通过Binding传递参数,同时支持自定义输入、接收返回结果:

修改后的Csvreader.groovy代码

// 接收主脚本传递的参数
def separatorChar = params.separator ?: ";"
def csvFile = new File(params.csvPath ?: "./test.csv")
def values = []
def headers = []

void readCsv(){
    csvFile.eachLine{ line, number ->
        if(number == 1){
            headers = line.split(separatorChar) as List
        } else{
            def value = line.split(separatorChar)
            def map =[:]
            value.eachWithIndex{ entry, idx ->
                map.put(headers[idx], entry)
            }
            values.add(map)
        }
    }
}

def getValues(){ return values }
def getHeaders(){ return headers }
def getSize(){ return values.size() }
def getLine(def keyParam, def value){
    return values.find{ it[keyParam] == value }
}

// 执行逻辑后返回结果给主脚本
readCsv()
return [
    headers: headers,
    values: values,
    getSize: this.&getSize,
    getLine: this.&getLine
]

主脚本调用代码

// 构造参数绑定对象
def binding = new Binding()
// 传入自定义参数
binding.setVariable("params", [
    csvPath: "./business.csv",
    separator: ","
])
// 执行脚本并接收返回结果
def csvResult = evaluate(new File("./Csvreader.groovy"), binding)
// 使用返回结果
println csvResult.headers
println csvResult.getSize()
println csvResult.getLine("order_id", "2024001")

内容的提问来源于stack exchange,提问作者user15980267

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:06:04