2017-12-19 4 views
0

大規模なソフトウェアに組み込まれるGroovyスクリプトを書くための簡単なオンライン・インターフェースがあります。私はVB6のプロジェクトとGroovyの間でバウンスしていたので、間違ってGroovyでdouble-equalsを使うことを意図した1つの等号(VB6はif文のために)を使いました。Groovyのif文のフィールドに値を代入すると、データベースにレコードが更新されます。

このようにif文のデータベースフィールドに値を代入すると、残りのif条件が真であったすべてのレコードが実際に更新されますか?

+0

ORMとトランザクションの処理に依存しますが、はいです。 – doelleri

+0

@doelleri if文の中で代入が真に評価されますか?私はif文がbooleanまで沸騰しなければならないので、if文の代入が構文エラーであると予想していたでしょうか?私はこのことを知りましたが、私はこのようなことをした唯一の人物です。私は、Groovyがどのようにこのように設計されたのか、興味をそそられています。割り当てのテスト条件を混在させるのはちょっと面倒です。逆さまにする必要があります。 – SnappingShrimp

+0

私は最初あなたの質問を誤解し、それが汚れた値の自動永続性に関連していると思った。 – doelleri

答えて

1

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" 
+0

これがなぜ有用な言語機能であるかの最後の例は、理解のために特に役立ちました。 – SnappingShrimp

関連する問題