首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个groovy代码会抛出一个MultipleCompilationErrorsException?

为什么这个groovy代码会抛出一个MultipleCompilationErrorsException?
EN

Stack Overflow用户
提问于 2009-02-17 21:16:51
回答 2查看 478关注 0票数 0

我有以下groovy代码:

代码语言:javascript
复制
class FileWalker {
    private String dir

    public static void onEachFile(String dir,IAction ia) {
        new File(dir).eachFileRecurse {
            ia.perform(it)
        }
    }
}

walker = new FileWalker()
walker.onEachFile(args[0],new PrintAction())

我注意到,如果我将一个def放在walker前面,脚本就能工作。这不应该是现在的样子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-18 03:47:30

您不需要groovyConsole或groovy脚本中的def。我认为拥有它是很好的编程实践,但是语言没有它就可以工作,并将这些类型的变量添加到脚本绑定中。

我不确定您的代码的其余部分(因为它不会像您发布的那样编译)。但是,您要么有一个非常旧的groovy版本,要么您的配置或其他代码出现了问题。

通过为缺少的IAction接口和PrintAction类添加一个存根,我可以让它在没有修改的情况下运行:

代码语言:javascript
复制
interface IAction {
    def perform(obj)
}

class PrintAction implements IAction{
    def perform(obj) {
        println obj
    }
}
class FileWalker {
    private String dir

    public static void onEachFile(String dir,IAction ia) {
        new File(dir).eachFileRecurse {
            ia.perform(it)
        }
    }
}

walker = new FileWalker()
walker.onEachFile(args[0],new PrintAction())

我创建了一个包含"foo/bar“和"foo/baz”文件的虚拟目录。

如果我将其保存为"walkFiles.groovy“并从命令行调用

代码语言:javascript
复制
groovy walkFiles.groovy foo

它打印:

代码语言:javascript
复制
foo/bar
foo/baz

这是groovy的最新版本:

代码语言:javascript
复制
groovy -v
Groovy Version: 1.6-RC-3 JVM: 1.5.0_16
票数 1
EN

Stack Overflow用户

发布于 2009-02-17 23:30:24

在脚本模式(或通过"groovyConsole")中,在使用它之前,需要使用"def“来声明walker。Groovy脚本文件在编译前被转换为类脚本的派生类。因此,每一项声明都需要正确地进行。

另一方面,当您在"groovysh“(或使用类GroovyShell的实例)中运行脚本时,它的机制会自动绑定每个引用对象,而不需要声明。

更新了:我的上述答案可能是错误的,因为我对Groovy的一个.class进行了反编译,发现它也在脚本中使用绑定对象。因此,我的第一段的确是错的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/558755

复制
相关文章

相似问题

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