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"
ORM 및 트랜잭션 처리에 따라 다르지만 예에 따라 다릅니다. – doelleri
@doelleri 할당 문은 if 문 안에서 true로 평가됩니까? if 문이 부울로 내려와야하기 때문에 if 문에서의 할당이 구문 오류 일 것으로 예상 했겠지요? 나는 이것으로 도마뱀을 봤지만, 지구상에서 유일하게 이런 일을 한 것처럼 보인다. Groovy가 어떻게 이런 식으로 설계되었는지 궁금하네요. 테스트 조건을 과제와 섞는 것이 좀 지저분 해 보입니다. 상승 여력이 있어야합니다. – SnappingShrimp
처음에는 질문을 잘못 읽고 그것이 더러운 값의 자동 지속성과 관련이 있다고 생각했습니다. – doelleri