微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Groovy闭包中模拟“继续”的最佳模式

看来Groovy不支持断点并从闭包内继续。什么是模拟这个的最好的方法

revs.eachLine { line -> 
    if (line ==~ /-{28}/) {
            // continue to next line...
    }

}

解决方法

你只能支持继续干净,不要打破。特别是像每个线路和每个东西。无法支持断点与如何评估这些方法有关,没有考虑没有完成可以传递给该方法的循环。以下是如何支持继续 –

最好的方法(假设你不需要结果值)。

revs.eachLine { line -> 
    if (line ==~ /-{28}/) {
        return // returns from the closure
    }
}

如果你的样本真的那么简单,这是有益于可读性。

revs.eachLine { line -> 
    if (!(line ==~ /-{28}/)) {
        // do what you would normally do
    }
}

一个选项,模拟继续在字节码级别通常做什么。

revs.eachLine { line -> 
    while (true) {
        if (line ==~ /-{28}/) {
            break
        }
        // rest of normal code
        break
    }

}

支持break的一种可能方式是通过异常:

try {
    revs.eachLine { line -> 
        if (line ==~ /-{28}/) {
            throw new Exception("Break")
        }
    }
} catch (Exception e) { } // just drop the exception

您可能想要使用自定义异常类型,以避免掩盖其他真实异常,特别是如果您在该类中有其他可能抛出真正异常的处理,如NumberFormatExceptions或IOExceptions。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐