2017-12-19 4 views
0

큰 소프트웨어에 통합되는 Groovy 스크립트를 작성하기위한 간단한 온라인 인터페이스가 있습니다. 나는 VB6에서 프로젝트와 Groovy에서 서로간에 튀어 오르고 있었고 실수로 Groovy에서 double-equals를 사용하려고했던 하나의 등호 (VB6은 if 문에서 사용)를 사용했습니다.Groovy에서 if 문의 필드에 값을 할당하면 데이터베이스에서 레코드를 업데이트 할 수 있습니다.

이 방식으로 if 문에서 데이터베이스 필드에 값을 할당하면 나머지 if 조건이 참인 모든 레코드를 실제로 업데이트 할 수 있습니까?

+0

ORM 및 트랜잭션 처리에 따라 다르지만 예에 따라 다릅니다. – doelleri

+0

@doelleri 할당 문은 if 문 안에서 true로 평가됩니까? if 문이 부울로 내려와야하기 때문에 if 문에서의 할당이 구문 오류 일 것으로 예상 했겠지요? 나는 이것으로 도마뱀을 봤지만, 지구상에서 유일하게 이런 일을 한 것처럼 보인다. Groovy가 어떻게 이런 식으로 설계되었는지 궁금하네요. 테스트 조건을 과제와 섞는 것이 좀 지저분 해 보입니다. 상승 여력이 있어야합니다. – SnappingShrimp

+0

처음에는 질문을 잘못 읽고 그것이 더러운 값의 자동 지속성과 관련이 있다고 생각했습니다. – doelleri

답변

1

Java의 할당 연산자는 방금 할당 된 변수를 반환합니다. 이것이 부울을 예상하는 명령문 안에 있으면 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 루프처럼 메소드의 반환 값을 반복하여 거짓을 반환 할 때까지 사용 사례가 있습니다.

while (data = getData()) { 
    doWork(data) 
} 
println "Done with all the data" 
+0

이것이 유용한 언어 기능인 이유의 마지막 예는 이해에 특히 유용했습니다. – SnappingShrimp

관련 문제