복붙노트

[SCALA] 왜`배열 (0,1,2) == 배열 (0,1,2)`예상 된 결과를 반환하지 않습니다?

SCALA

왜`배열 (0,1,2) == 배열 (0,1,2)`예상 된 결과를 반환하지 않습니다?

지금까지 내가 이해, 스칼라는 == 두 개체의 자연 평등을 정의합니다.

그 배열 (0,1,2) == 배열 (0,1,2)은 자연의 평등을 비교 예상했다. 다른 배열의 해당 요소와 비교할 때, 예를 들어, 수표가 어레이의 모든 요소는 true를 반환하는 경우.

사람들은 스칼라의 배열은 단지 만의 정체성을 비교하는 자바 []라고 나에게 말했다. 대신 자연 평등을 비교 Array'sequals 메소드를 오버라이드 (override)하는 것이 더 의미하지 않을까요?

해결법

  1. ==============================

    1.스칼라 2.7 문제가 있었다 코너의 경우에 자바 [] 배열에 대한 기능 및 RAN을 추가했습니다. 스칼라 2.8가 어레이 선언 [T]는 T []는이지만, 래퍼 및 등가물을 제공한다.

    스칼라 2.7 문제가 있었다 코너의 경우에 자바 [] 배열에 대한 기능 및 RAN을 추가했습니다. 스칼라 2.8가 어레이 선언 [T]는 T []는이지만, 래퍼 및 등가물을 제공한다.

    다음 2.8 (편집 / 참고 : RC3의로, GenericArray이 ArraySeq입니다 - retronym 덕분에이 밖으로 포인팅을위한) 시도 :

    import scala.collection.mutable.{GenericArray=>GArray, WrappedArray=>WArray}
    scala> GArray(0,1,2) == GArray(0,1,2)
    res0: Boolean = true
    
    scala> (Array(0,1,2):WArray[Int]) == (Array(0,1,2):WArray[Int])
    res1: Boolean = true
    

    GenericArray은 첨가 된 모든 스칼라 모음 스터를 제외하고, 단지 어레이와 같은 역할 WrappedArray 자바 [] 배열을 감싼다.; 위, I은, 랩 된 배열에 비해 다음과 (암시 적 변환 기능을 호출하는 것보다 더 쉽게) 그것을 일반 배열을 캐스팅했다. 이 래퍼는 [] 배열에 근거하지만, 또한 당신에게 모든 수집 케이크를 제공합니다.

  2. ==============================

    2.그것이 불가능하기 때문에 스칼라 배열의 평등을 무시하지 않습니다. 서브 클래스 때 하나는 방법을 대체 할 수 있습니다. 어레이가 (가능하지 않은) 서브 클래 싱하지 않기 때문에, 스칼라의 방법을 대체 할 수 없다.

    그것이 불가능하기 때문에 스칼라 배열의 평등을 무시하지 않습니다. 서브 클래스 때 하나는 방법을 대체 할 수 있습니다. 어레이가 (가능하지 않은) 서브 클래 싱하지 않기 때문에, 스칼라의 방법을 대체 할 수 없다.

  3. ==============================

    3.스칼라가 아무것도 무시하지 않는다 java.lang.String의이 등호의 값에 의존하는 구현 (가) (다른 많은 자바 클래스 만 달리 배열 등).

    스칼라가 아무것도 무시하지 않는다 java.lang.String의이 등호의 값에 의존하는 구현 (가) (다른 많은 자바 클래스 만 달리 배열 등).

  4. from https://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result by cc-by-sa and MIT license