Unit
는 AnyVal
(그리고 유일한 값이 ()
입니다)의 하위로 지정, 왜이 가능하다 :배열 단위가 null을 유지할 수있는 이유는 무엇입니까?
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
이 REPL의 배열 인쇄 메커니즘이 단지 버그/누락인가, 아니면 거기에있다 그 이유?
Unit
는 AnyVal
(그리고 유일한 값이 ()
입니다)의 하위로 지정, 왜이 가능하다 :배열 단위가 null을 유지할 수있는 이유는 무엇입니까?
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
이 REPL의 배열 인쇄 메커니즘이 단지 버그/누락인가, 아니면 거기에있다 그 이유?
그것은 스칼라 2.9에 대한 고정 된 지금 인쇄 :
scala> val units = new Array[Unit](5)
units: Array[Unit] = Array((),(),(),(),())
이 문제는 배열 초기화의 제한이라고 생각합니다. 원시 값의 경우 배열은 원시 배열을 사용하는 스칼라 배열 덕분에 JVM에 의해 가정 된 기본값으로 초기화됩니다.
다른 유형의 경우 값은 객체로 래핑되고 null로 초기화 된 것 같습니다.
단위 배열을 원한다면 val units = Array.fill(5)(())
으로 전화해야 할 수 있습니다.
NULL은 아마도이 문자열 표현에만 나타납니다. 즉시 배열에서 값을 얻을, 그것은 Unit
에 "언 박싱"입니다 : 유사한 논의가 Nothing
대신 Unit
으로 that question에 있었다
scala> val refs = new Array[AnyRef](5)
refs: Array[AnyRef] = Array(null, null, null, null, null)
scala> refs(0)
res0: AnyRef = null // we do get the null here
:
는scala> val units = new Array[Unit](5)
units: Array[Unit] = Array(null, null, null, null, null)
scala> units(0)
// note: no result
함께 비교.
내가 단위 값이 박스 없음됩니다 확실하지 않다'(새 Array [단위] (5)) (0) ==()' 'false'를 반환합니다. 그리고'(new Array [Unit] (5)) (0) == null'은'true'와 흥미로운 경고를 리턴합니다! '{val a = Array.fill (5) (()); a (0) ==()}'는'true'를 리턴합니다. – huynhjl