groovy – 为什么空集合上的每个闭包至少运行一次?

groovy – 为什么空集合上的每个闭包至少运行一次?,第1张

概述我有一个从Web服务器下载文件的功能,有时会提供空集合.在函数中,我在该集合上调用每个函数,我期望发生的是函数只是退出,每个闭包都没有运行.问题是,它确实运行了一个空的文件名参数,并且FileOutputStream的创建在它被提供目录而不是文件时变得繁荣. def get(String baseUrl, List files, String targetDir) { files.each 我有一个从Web服务器下载文件的功能,有时会提供空集合.在函数中,我在该集合上调用每个函数,我期望发生的是函数只是退出,每个闭包都没有运行.问题是,它确实运行了一个空的文件名参数,并且fileOutputStream的创建在它被提供目录而不是文件时变得繁荣.

def get(String baseUrl,List files,String targetDir) {    files.each { filename ->    // Goes BOOM on next line    def fos = new fileOutputStream(targetDir + file.separator + filename)    ...}

为什么Groovy表现得像这样,我应该怎么做呢?

解决方法 它没有,所以我假设文件包含一些东西(比如null?)

[].each {  println "boom"  // This doesn't appear}[null].each {  println "pow!"  // this does}

假设它在你的文件列表中是空的,导致问题,你可以通过以下方式摆脱它们:

files.findAll().each { filename ->  def fos = new fileOutputStream( new file( targetDir,filename ) )  ...

或者当然,首先使生成List的东西不添加空值

编辑

实际上,听起来你有一个带有空字符串的List ……

findAll修复程序应该仍然有效,因为在Groovy Truth下空字符串的计算结果为false

编辑2

作为快速说明,您可以更改:

def fos = new fileOutputStream( new file( targetDir,filename ) )...

至:

new file( targetDir,filename ).withOutputStream { fos ->  ...

它会为你ensure the stream is closed 总结

以上是内存溢出为你收集整理的groovy – 为什么空集合上的每个闭包至少运行一次?全部内容,希望文章能够帮你解决groovy – 为什么空集合上的每个闭包至少运行一次?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存