복붙노트

[SCALA] 이유는 무엇입니까 배열에없는 배열의 == 함수 반환 진정한 (1,2) == 배열 (1,2)?

SCALA

이유는 무엇입니까 배열에없는 배열의 == 함수 반환 진정한 (1,2) == 배열 (1,2)?

스칼라 프로그래밍에서 저자는 스칼라의 == 기능을 참조 평등 대신 값 평등을 비교 것을 쓰기.

목록에 예상대로이 작동합니다 :

scala> List(1,2) == List(1,2)
res0: Boolean = true

그러나 그것은 배열에서 작동하지 않습니다 :

scala> Array(1,2) == Array(1,2)
res1: Boolean = false

저자는 대신 sameElements 기능을 사용하는 것이 좋습니다 :

scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true

설명으로 그들은 쓰기 :

해결법

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

    1.이 책에서 제공되는 설명은 의문의 여지가 있지만, 그들은 그것을 쓸 때 좀 더 믿을 수 있었다 공정을 수 있다는 사실이다. 그것은 2.8 여전히 사실이지만 우리는 당신이 발견 한 것처럼 그들은 변경할 경우에도, 다른 모든 컬렉션 요소 비교를 할 수 있기 때문에 다른 이유를 개조해야합니다.

    이 책에서 제공되는 설명은 의문의 여지가 있지만, 그들은 그것을 쓸 때 좀 더 믿을 수 있었다 공정을 수 있다는 사실이다. 그것은 2.8 여전히 사실이지만 우리는 당신이 발견 한 것처럼 그들은 변경할 경우에도, 다른 모든 컬렉션 요소 비교를 할 수 있기 때문에 다른 이유를 개조해야합니다.

    혈액의 많은 배열이 컬렉션의 나머지처럼 보일 수 있도록 노력 창고했다, 그러나 이것은 대단히 새는 추상화이었고, 결국 그것은 불가능했다. 그것은 우리가 그들의 능력을 향상시키기 위해 암시 기계를 사용하여, 다른 극단에 가서 기본 배열에게 그들이있는 방법을 제공해야한다고 제대로 생각, 결정되었다. 이 가장 눈에 띄게 아래로 떨어질 경우 그 중 어느 것도 배열에 합리적인 방식으로 동작하기 때문에, toString과 같음이지만, 우리는 암시 적 변환으로 이러한 호출을 가로채는 그들은 java.lang.Object 상위에 정의 할 수 있기 때문이다. (표현이 수표를 입력하지 않고, 사람들은 항상 체크를 입력 할 때 전환은 발생합니다.)

    당신이 당신의 설명을 선택할 수 있도록했지만 결국 배열의 기본 구조가 근본적으로 다르게 취급하고있는 방법은 가격 어딘가를 지불하지 않고 그 이상의 용지가 없습니다. 그것은 끔찍한 상황이 아니다, 그러나 당신이 알고 있어야 무언가이다.

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

    2.이 정확한 질문이 소리 난 여러 번 있었다 (너무 자신에 의해, 배열 형의 이상한 행동을 참조).

    이 정확한 질문이 소리 난 여러 번 있었다 (너무 자신에 의해, 배열 형의 이상한 행동을 참조).

    이 == 지원하지 않습니다 만 배열 수집 것을 참고, 모든 다른 컬렉션 않습니다. 근본 원인은 어레이가 Java 배열된다는 것이다.

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

    3.그것은 참조 투명성에 대한 모든입니다. 아이디어는 두 값 == 경우, 당신이 뭔가를 사용하는 한 문제가되지해야합니다. 같은 내용으로 두 배열이있는 경우는 동일한 하나가 아니라면, 그것은 분명히 문제는 반환 == 그래서 거짓을 수정하는 일.

    그것은 참조 투명성에 대한 모든입니다. 아이디어는 두 값 == 경우, 당신이 뭔가를 사용하는 한 문제가되지해야합니다. 같은 내용으로 두 배열이있는 경우는 동일한 하나가 아니라면, 그것은 분명히 문제는 반환 == 그래서 거짓을 수정하는 일.

  4. from https://stackoverflow.com/questions/3737711/why-doesnt-arrays-function-return-true-for-array1-2-array1-2 by cc-by-sa and MIT license