[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.스칼라 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.그것이 불가능하기 때문에 스칼라 배열의 평등을 무시하지 않습니다. 서브 클래스 때 하나는 방법을 대체 할 수 있습니다. 어레이가 (가능하지 않은) 서브 클래 싱하지 않기 때문에, 스칼라의 방법을 대체 할 수 없다.
그것이 불가능하기 때문에 스칼라 배열의 평등을 무시하지 않습니다. 서브 클래스 때 하나는 방법을 대체 할 수 있습니다. 어레이가 (가능하지 않은) 서브 클래 싱하지 않기 때문에, 스칼라의 방법을 대체 할 수 없다.
-
==============================
3.스칼라가 아무것도 무시하지 않는다 java.lang.String의이 등호의 값에 의존하는 구현 (가) (다른 많은 자바 클래스 만 달리 배열 등).
스칼라가 아무것도 무시하지 않는다 java.lang.String의이 등호의 값에 의존하는 구현 (가) (다른 많은 자바 클래스 만 달리 배열 등).
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
'SCALA' 카테고리의 다른 글
[SCALA] 자바 8 스트림 API와 정수의 목록을 셔플 (0) | 2019.11.09 |
---|---|
[SCALA] 스칼라에서 제네릭 형식에 대한 패턴 매칭 (0) | 2019.11.09 |
[SCALA] 소스가 Source.actorRef에서 만든 akka 스트림의 기본 ActorRef 액세스 (0) | 2019.11.09 |
[SCALA] 앞으로의 참조 - 왜이 코드를 컴파일합니까? (0) | 2019.11.09 |
[SCALA] java.lang.String의 대 스칼라 문자열 - 형식 유추 (0) | 2019.11.09 |