Groovy 2.2.2 현재 cast/as 연산자 우선순위 버그 컴퓨터

Groovy 1.x에서부터 as나 cast 연산자의 우선순위가 잘못되는 문제가 있었던 모양입니다. 프로그래밍 중 우연히 발견하고 찾아보니 관련 이슈 GROOVY-5185가 존재하네요. 2011년에 제기된 문제인데 해결이 쉽지 않은지 아직까지 계속되고 있습니다.

(int) (-1 / 3) + 1
가 원래는 ((int) (-1 / 3)) + 1로 동작해서 1이 나와야 정상인데 현재는 (int) ((-1 / 3) + 1)로 동작하여 0이 나옵니다.

유사한 as 연산자를 이용하여 (-1 / 3) as int + 1을 시도할 경우 파서가 int + 1을 파싱 시도하다가 문법 오류가 발생합니다.

임시방편으로 번거롭지만 프로그램의 예상치 못한 버그로 이어지지 않도록 두 연산자 사용 시 괄호를 확실히 적어주는 것이 좋습니다.
  • ((int) (-1 / 3)) + 1
  • ((-1 / 3) as int) + 1

위 식의 경우 Groovy에서 기본 제공하는 intdiv 메소드를 이용하는 방법도 있습니다.

  • (-1).intdiv(3) + 1
해당 이슈의 상위 task인 GROOVY-5299를 보니 Groovy 3.0에서 ANTLR 4에 맞춰 문법을 재작성하는 과정에서 해결할 모양입니다. 로드맵에 따르면 2014년 4분기 발표를 목표로 하고 있네요.

덧글

댓글 입력 영역