首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy包括新的Groovy脚本

Groovy包括新的Groovy脚本
EN

Stack Overflow用户
提问于 2021-05-20 10:11:54
回答 1查看 62关注 0票数 1

我对Groovy非常陌生,我想从主groovy脚本中的另一个groovy脚本中导入一个类。我已经看到这个post了。但是,由于环境限制,我不能像GroovyClassLoader这样的函数,也不能导入任何libs/框架。我唯一的可能就是使用评估方法。

我试过这个:

主脚本(计算值不会抛出任何错误)

代码语言:javascript
复制
File csvFile = new File("./Csvreader.groovy");
evaluate(csvFile);

Csvreader脚本

代码语言:javascript
复制
class CSVReader{
    def csvFile = new File('./test.csv');
    def separatorChar = ";"
    def values = [];
    def headers = [];

    void setSeperator(String s){
        if(s != ""){
            separatorChar = s;
        }
    }

    void readCsv(){
        csvFile.eachLine{ line, number ->
            if(number == 1){
                def head = line.split(separatorChar);
                for (entry in head) {
                    headers.add(entry);
                }
            } else{
                def value = line.split(separatorChar);
                def map =[:];
                def i = 0;
                for (entry in value) {
                    map.put(headers[i], entry);
                    i++;
                }
                values.add(map);
            }
        }

    }

    def getValues(){
        return values;
    }

    def getHeaders(){
        return headers;
    }

    def getSize(){
        return values.size();
    }

    def getLine(def keyParam, def value){
        for(int i = 0; i < values.size(); i++){
            def line = values[i];
            if(values[i][keyParam] == value){
                return values[i];
            }
        }
        
    }

}

但是,我需要通过计算调用传递参数(并将方法移出类之外),或者需要创建类的实例。不幸的是,我真的不知道我怎么能做到这一点,有人有解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 14:23:42

您可以尝试在Csvreader.groovy文件的末尾放置表达式return CSVReader.class,该表达式将返回已编译的类。

然后,在调用方脚本中,您可以创建该类的实例,并将其用作任何其他类实例。

Csvreader.groovy

代码语言:javascript
复制
class CSVReader{
    def separatorChar = ";"
    
    void setSeparator(String s){
        if(s != ""){
            separatorChar = s;
        }
    }
}

return CSVReader.class

调用方脚本

代码语言:javascript
复制
File csvFile = new File("./Csvreader.groovy")
def CSVReaderClass = evaluate(csvFile)
def cvsReader = CSVReaderClass.newInstance()

cvsReader.setSeparator("Z")
println cvsReader.separatorChar
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67618324

复制
相关文章

相似问题

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