Eu estava procurando uma resposta sobre o que |=
faz no Groovy e, embora as respostas acima estejam corretas, elas não me ajudaram a entender um pedaço de código específico que eu estava procurando.
Em particular, quando aplicada a uma variável booleana "| =", ela será configurada como TRUE na primeira vez em que encontrar uma expressão verdadeira no lado direito e manterá seu valor TRUE para todas as chamadas subsequentes. Como uma trava.
Aqui está um exemplo simplificado disso:
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
Resultado:
false
false
true
true
Edit : Por que isso é útil?
Considere uma situação em que você deseja saber se algo mudou em uma variedade de objetos e, em caso afirmativo, notifique alguma dessas alterações. Então, você configuraria um hasChanges
booleano e o definiria para |= diff (a,b)
então |= dif(b,c)
etc. Aqui está um breve exemplo:
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
pipe equal operator
a esta pergunta ou qualquer outra documentação sobre o tópico não ajudaria as pessoas a pesquisar.