Javaの代入演算子は、ちょうど割り当てられた変数を返します。これがブール値を期待する文の内部にある場合、Groovyの真実性に従って評価されます。いくつかの表明をして私たちは、Groovyのコンソールでこれを見ることができます:あなたはので、あなたは意志それらなしで「仕事」には、このために、二重括弧を必要とする
groovy:000> if ((foo = 'bar')) {
groovy:001> println "Assignment was true!"
groovy:002> }
Assignment was true!
注:
groovy:000> assert (foo = 1)
===> null
groovy:000> assert (foo = 0)
ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
assert (foo = 0)
|
0
またはif
文を使用して
それを解析しようとするとコンパイルエラーが出ます:
groovy:000> if (foo = 'bar') {
groovy:001> println "Assignment was true!"
groovysh_parse: 2: expecting ')', found '=' @ line 2, column 9.
if (foo = 'bar') {
^
それはかなり陰湿なことができます。ただし、whileループのように、メソッドの戻り値がfalseを返すまで繰り返します。
while (data = getData()) {
doWork(data)
}
println "Done with all the data"
ORMとトランザクションの処理に依存しますが、はいです。 – doelleri
@doelleri if文の中で代入が真に評価されますか?私はif文がbooleanまで沸騰しなければならないので、if文の代入が構文エラーであると予想していたでしょうか?私はこのことを知りましたが、私はこのようなことをした唯一の人物です。私は、Groovyがどのようにこのように設計されたのか、興味をそそられています。割り当てのテスト条件を混在させるのはちょっと面倒です。逆さまにする必要があります。 – SnappingShrimp
私は最初あなたの質問を誤解し、それが汚れた値の自動永続性に関連していると思った。 – doelleri