Scala에서 'val a : A = _'(밑줄)은 정확히 무엇을 의미합니까?


답변:


143

val a: A = _컴파일 오류입니다. 예를 들면 :

scala> val a: String = _
<console>:1: error: unbound placeholder parameter
       val a: String = _
                       ^

작동하는 것은 무엇입니까 var a: A = _( var대신 참고 val). Chuck이 대답에서 말했듯이 이것은 변수를 기본값으로 초기화합니다. Scala 언어 사양에서 :

T가 Int 또는 하위 범위 유형 중 하나이면 0,
T가 Long이면 0L,
T가 Float이면 0.0f,
T가 Double이면 0.0d,
T가 부울이면 false,
() T가 단위이면 false,
다른 모든 유형의 경우 null 티.


6
하, val / var 스위치를 잘 잡았습니다. 내 뇌는 바로 지나쳤습니다.
Chuck

2
이것이 작동하도록 만들어지지 않은 이유에 대한 통찰력이 val있습니까?
Erik Kaplun 2014 년

4
@ErikAllik : 이것은 순수한 추측이지만 val a: Int = _작동한다면 나쁜 습관이 될 것이기 때문에 아마도 컴파일 오류 일 것입니다. 그것은 단지 난독 화 된 글쓰기 방식 일뿐 val a: Int = 0입니다. vara var가 변경 될 것으로 예상 되므로 a를 기본값으로 설정하는 것이 합리적 이지만 a val는 고정되어 있으므로 값을 명시 적으로 할당하는 것이 좋습니다.
Shuklaswag

1
@Shuklaswag : 정수를 아는 경우에만. 아직 모르는 유형의 값을 초기화하는 데 이것을 사용하려고합니다.
Adrian May

33

a유형의 기본값으로 초기화 됩니다 A. 예를 들어 Int의 기본값은 0이고 참조 유형의 기본값은 null입니다.


10
NotNull특성 이 혼합 된 클래스의 기본값은 무엇입니까 ? :-)
Jean-Philippe Pellet

9
@ Jean-PhilippePellet : Scala 2.9.0.1 (내가 사용한 가장 최근 버전)에서 NotNull 특성에 혼합되는 클래스의 기본값은 – 극적인 일시 중지 – null 입니다. 나는 이것이 아마도 언젠가는 바뀔 것이라고 예상하지만, 현재는 더 _나은 것 같다 NotNull.
Chuck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.