Groovy的每一个方法和任何方法都是短路的吗?

时间:2017-06-09 03:16:46

标签: groovy

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

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}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

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

更新:回答太快了。两者都会短路。如果every遇到使其评估为false的内容,它将会短路。抱歉。我值得投票: - (