Scala 이상한 점

Posted 2008.04.22 19:48
마소 원고 쓰면서 Scala를 가지고 놀다가 재밌는 사례를 발견했습니다.

val은 보통 변하지 않는 값(immutable)을 선언할 때 쓰는 키워드인데, 다음과 같이 선언을 했더니 오류가 발생하지 않고 x 가 1이 되더군요.

scala> val x: Int = x + 1
x: Int = 1


우변의 x + 1은 x가 아직 초기화 되지 않았기 때문에 오류가 발생해야 맞을 것 같은데, 신기하게 그냥 0으로 초기화되고 1을 더해서 x의 값은 1이 되었습니다. scala-user 메일링 리스트에 물어봤더니, Scala 인터프리터에서 위와 같이 선언하면 다음과 같은 클래스를 생성한다고 합니다.


class Foo {
     int x;
     public Foo() {
         x = x + 1;
     }
 }

x가 필드가 되기 때문에 x은 자동으로 0이 할당되고, x + 1은 1이 됩니다. 이건 구현상의 이슈고, Scala에서는 적절히 오류가 발생해야 맞을 것 같은데, 언어 명세에 어떻게 정의해놨는지 모르겠군요.


  1. Favicon of http://agbird.egloos.com BlogIcon gimmesilver

    | 2008.04.23 11:35 | PERMALINK | EDIT | REPLY |

    언어 명세에는 위와 같은 경우에 대해 직접적인 언급은 없습니다만,

    A value definition val x: T = e defines x as a name of the value that results from
    the evaluation of e.

    위 정의대로라면 위 소스 구문은 오류겠죠. 우변식에 우변식값을 의미하는 x가 포함되었으니까요...(일종의 순환논증?)
    그리고 윈도우용 scala 컴파일러에서는 에러가 발생하더군요...

    p.s. 참고로 본문의 val x=x+1 코드 앞에 lazy를 붙이면 스택 오버플로우 에러가 발생한다는...^^

  2. | 2008.04.24 13:37 | PERMALINK | EDIT | REPLY |

    비밀댓글입니다

Write your message and submit
« PREV : 1 : ··· : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : ··· : 44 : NEXT »