2011-05-02 5 views

답변

1

그것은 스칼라 2.9에 대한 고정 된 지금 인쇄 :

scala> val units = new Array[Unit](5) 
units: Array[Unit] = Array((),(),(),(),()) 
3

이 문제는 배열 초기화의 제한이라고 생각합니다. 원시 값의 경우 배열은 원시 배열을 사용하는 스칼라 배열 덕분에 JVM에 의해 가정 된 기본값으로 초기화됩니다.

다른 유형의 경우 값은 객체로 래핑되고 null로 초기화 된 것 같습니다.

단위 배열을 원한다면 val units = Array.fill(5)(())으로 전화해야 할 수 있습니다.

3

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 

함께 비교.

+0

내가 단위 값이 박스 없음됩니다 확실하지 않다'(새 Array [단위] (5)) (0) ==()' 'false'를 반환합니다. 그리고'(new Array [Unit] (5)) (0) == null'은'true'와 흥미로운 경고를 리턴합니다! '{val a = Array.fill (5) (()); a (0) ==()}'는'true'를 리턴합니다. – huynhjl