Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试空groovy闭包?_Groovy_Closures - Fatal编程技术网

测试空groovy闭包?

测试空groovy闭包?,groovy,closures,Groovy,Closures,我想让用户为groovy类提供一个属性,该属性是一个文件选择器闭包,我将其传递给AntBuilder的“复制”任务: class Foo { def ANT = { fileset(dir:'/tmp/tmp1') } } 在我的代码中,我选择ANT属性作为“fAnt”并传递给ANT: ant.copy(todir:'/tmp/tmp2', fAnt) 这是可行的——但是,如果用户传入一个空闭包(def ANT={}),或者使用一个没有选择任何内容的选择器(可能files

我想让用户为groovy类提供一个属性,该属性是一个文件选择器闭包,我将其传递给AntBuilder的“复制”任务:

  class Foo {
    def ANT = { fileset(dir:'/tmp/tmp1') }
  }
在我的代码中,我选择ANT属性作为“fAnt”并传递给ANT:

  ant.copy(todir:'/tmp/tmp2', fAnt)

这是可行的——但是,如果用户传入一个空闭包(def ANT={}),或者使用一个没有选择任何内容的选择器(可能fileset dir不存在),那么它就会崩溃。我试图用一个try-catch来包围ant副本,以捕获调用异常,但无论如何异常都会出现。。。在我追踪的过程中,有没有办法将groovy闭包的内容作为字符串读回,或者测试它是否为空?

一个谜团被解开了——我需要捕获的异常是org.apache.tools.ant.BuildException——所以我可以捕获它来捕获错误,但最初的问题仍然存在——有没有办法检查闭包的内容?

一个谜团已经解开——我需要捕获的异常是org.apache.tools.ant.BuildException——所以我可以捕获它来捕获错误,但最初的问题仍然存在——有没有办法检查闭包的内容?

简言之:没有。您无法在运行时以有意义的方式反编译闭包。如果它是用户提供的,那么闭包甚至可以是一个Java类

长句回答:如果你想做很多工作,你也许可以,但这可能不值得。Groovy解析器是API的一部分,因此如果您可以访问源代码,理论上可以检查AST并确定闭包是否为空。看看这个班


不过,几乎可以肯定,这不值得付出努力。您最好捕获异常并添加一条有用的消息,如“您可能传递了一个空的闭包或无效的文件集”。

简言之:不。您不能在运行时以有意义的方式反编译闭包。如果它是用户提供的,那么闭包甚至可以是一个Java类

长句回答:如果你想做很多工作,你也许可以,但这可能不值得。Groovy解析器是API的一部分,因此如果您可以访问源代码,理论上可以检查AST并确定闭包是否为空。看看这个班

不过,几乎可以肯定,这不值得付出努力。您最好捕获异常并添加一条有用的消息,如“您可能传递了一个空的闭包或无效的文件集”