【问题标题】:Do the Groovy every and any methods short-circuit?Groovy 的所有方法都会短路吗?
【发布时间】:2017-06-09 03:16:46
【问题描述】:

假设 every 或 any 方法正在对一个长列表进行评估,并且第一个元素上的闭包值足以确定最终结果(任何为真,每一个为假)。这些方法是继续处理列表的其余元素还是立即返回?

def lst = [1,2,3,4]
//Do either of these functions evaluate the 2nd, 3rd and 4th element of lst?
boolean value1 = lst.any{element -> element == 1}
boolean value2 = lst.every {element -> element == 2}

【问题讨论】:

    标签: groovy


    【解决方案1】:

    any()every()短路,尽快返回。

    您可以在any()every() 的源代码中看到这一点。这些方法每个都迭代每个评估闭包的对象,如果条件满足(对于any())/不满足(对于every()),则返回。

    【讨论】:

      【解决方案2】:

      是和否。您帖子中的第一个闭包 - any - 会在第一个值上短路,使其评估为真。但是闭包every 不能通过设计和逻辑短路;它必须扫描每个值以确保它满足指定的条件,在您的情况下为element == 2。使用Groovy web console 进行测试。不要忘记添加assert 语句或println value1; println value2 以查看结果。

      更新:回答太快了。两者都会短路。 every 如果遇到使其评估为假的原因,则会短路。对不起。我应该投反对票:-(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 2019-01-05
        • 2016-04-30
        • 1970-01-01
        相关资源
        最近更新 更多