我一直在寻找有关|=
Groovy 功能的答案,尽管上面的答案是正确的,但它们并没有帮助我理解我正在查看的特定代码。
特别是,当应用于布尔变量时,“|=”将在它第一次遇到右侧的真值表达式时将其设置为 TRUE,并将在所有 |= 后续调用中保持其 TRUE 值。像一个闩锁。
这是一个简化的例子:
groovy> boolean result
groovy> //------------
groovy> println result //<-- False by default
groovy> println result |= false
groovy> println result |= true //<-- set to True and latched on to it
groovy> println result |= false
输出:
false
false
true
true
编辑:为什么这有用?
考虑一种情况,您想知道各种对象是否发生了任何变化,如果发生了变化,请通知其中一些变化。因此,您将设置一个hasChanges
布尔值并将其设置为 |= diff (a,b)
然后|= dif(b,c)
等。这是一个简短的示例:
groovy> boolean hasChanges, a, b, c, d
groovy> diff = {x,y -> x!=y}
groovy> hasChanges |= diff(a,b)
groovy> hasChanges |= diff(b,c)
groovy> hasChanges |= diff(true,false)
groovy> hasChanges |= diff(c,d)
groovy> hasChanges
Result: true