scala> val a = Array [Double] (10)
a: Array[Double] = Array(10.0)
scala> val a = new Array [Double] (10)
a: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
왜이 두 표현식에는 다른 의미가 있습니까?스칼라 배열 생성자?
scala> val a = Array [Double] (10)
a: Array[Double] = Array(10.0)
scala> val a = new Array [Double] (10)
a: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
왜이 두 표현식에는 다른 의미가 있습니까?스칼라 배열 생성자?
다소 혼란 스럽지만 스칼라는 기본적으로 클래스의 싱글 인스턴스는 인스턴스를 생성 할 수 있습니다 클래스 및 객체의 개념을 가지고있다. 컴패니언 클래스이라는 개념이 있으며, 클래스와 동일한 이름의 오브젝트 쌍입니다. 이 메커니즘을 사용하면 "클래스"는 본질적으로 정적 메서드를 가질 수 있습니다. 스칼라에서는 그렇지 않습니다.
Array
는 클래스 및 동반자 객체 모두 있습니다. 또한, Array
object은 apply
방법을 갖는다. apply
은 Array(arg)
으로 개체를 만들 수 있음을 의미합니다. 그러나 Array
은 컴패니언 클래스이므로 더 일반적인 메커니즘 인 new Array(arg)
을 통해 호출 할 수있는 생성자도 있습니다.
Array
개체의 apply
개체가 Array
생성자와 다른 의미를 갖고 있다는 점이 문제입니다. apply
메서드는 지정된 객체에서 배열을 만듭니다. 따라서 Array(1,2,3)
은 1
, 2
및 3
과 같은 객체로 구성된 배열을 반환합니다. 한편, 생성자는 배열 차원의 크기를 지정하는 인수를 사용하여 (다차원 배열을 만들 수 있도록) 모든 슬롯을 기본값으로 초기화합니다. 그래서, 기본적
:
val a = Array [Double] (10)
는 주어진 객체를 포함한 새로운 배열을 만드는 Array
객체, apply
의 메소드를 호출한다.val a = new Array [Double] (10)
은 Array
생성자를 호출합니다.이 생성자는 기본값이 0.0
으로 초기화 된 10 개의 슬롯을 가진 새로운 배열을 만듭니다.좋은 답변입니다. 감사! –
@mipadi, 10 개의 슬롯과 1을 기본값으로 사용하여 새 배열을 만드는 방법은 무엇입니까? 감사합니다 – city
@city'val a = Array.fill (10) {1}' –
new Array[Double](10)
은 Java에서 new double[10]
과 동등한 것으로 가정됩니다.
그러나 Scala는 컬렉션 클래스에 해당하는 단일 항목에 편리한 메서드를 제공하며 Array
도 예외는 아닙니다.
따라서 List(1,2,3,4,5)
이라고 말하면 Array(1,2,3,4,5)
이라고 말할 수도 있습니다. 그리고 당신은 할 수 있습니다.
그러나 단어가 new
인지 아닌지에 따라 다소 다른 결과를 나타내는 것은 다소 어색한 입장입니다. 경쟁적인 관심사를 감안할 때 전반적으로 가장 좋은 솔루션이라고 생각합니다.하지만 조금 익숙해 져야합니다.
스칼라에서 관리하는 어레이는 해충입니다. 고정 된베이스에서 개발하는 경우에만 가능합니다. – sub
"고정 된베이스?" 사실 어레이 치료가 2.7에서 2.8로 크게 바뀌었지만 앞으로도 안정적으로 유지 될 것으로 기대합니다. 이제 스칼라 배열은 자바 배열입니다. 스칼라의 "추가"배열 기능은 암시를 통해 처리됩니다. –
implict를 사용하면 Array가 더 많은 기능을 사용할 수 있습니까? –