객체 키가있는 변경 가능한 맵

사용자 6855984

다음이 예외없이 실행되는 이유는 무엇입니까?

import scala.collection.mutable

class Label(val name: String) {
    override def toString = s"Label($name)"
}

object Main extends App {
    var map = mutable.Map[Label, Int]()
    val ab = new Label("AB")
    map += ab -> 1
    println(map(ab))
}

다음은 다음을 생성합니다 NoSuchElementException.

import scala.collection.mutable

class Label(val name: String) {
    override def toString = s"Label($name)"
}

object Main extends App {
    var map = mutable.Map[Label, Int]()
    map += new Label("AB") -> 1
    println(map(new Label("AB")))
}

나는 이것에 대한 해결책을 찾을 수 없었지만 그것이 Scala의 평등과 정체성의 차이와 관련이 있다고 믿습니다.

스티브 월드 먼

Scala의 평등과 동일성은 Java와 같습니다. 기본적으로 두 개체는 동일한 경우에만 동일합니다. 클래스는 오버라이드 (override) 할 필요가 equalshashCode두 가지 객체가 해시 데이터 동등하게 처리 할 수 있도록한다. 기본적으로 이러한 메서드가 재정의되지 않으면 두 개체가 "같지"않고 해시 키로 대체되지 않습니다.

Java와 Scala의 주요 차이점은 ==연산자가 동등성을 테스트한다는 것입니다. 즉 equals, Java에서는 ==ID를 테스트 하는 동안 메서드를 사용합니다 . (Scala에서 ID를 테스트하려면 eq연산자를 사용하십시오 .)

따라서 두 번째 코드 스 니펫에서 각 평가 new Label("AB")는 고유하고 동등하지 않은 객체 생성합니다. 두 번째 평가의 결과를 살펴보면 첫 번째 평가로 해결할 수 없습니다.

자바보다 훨씬 더 많은 스칼라 그러나, 일반적인 관행은 재정을 불변의 객체를 정의하는 것입니다 equalshashCode. Scala는 "케이스 클래스"라는 개념을 제공하는데, 이는 다른 편의 중에서도 이러한 메서드를 자동으로 재정의합니다.

case대한 클래스 정의 앞에 단어 넣어 두 번째 코드 조각을 수정할 수 있습니다 Label.

scala> import scala.collection.mutable
import scala.collection.mutable

scala> case class Label(val name: String) {
     |     override def toString = s"Label($name)"
     | }
defined class Label

scala> object Main extends App {
     |     var map = mutable.Map[Label, Int]()
     |     map += new Label("AB") -> 1
     |     println(map(new Label("AB")))
     | }
defined object Main

scala> Main.main(Array.empty[String])
1

케이스 클래스는 클래스에 대한 동반 객체와 apply기본 생성자를 호출 하는 메소드도 자동으로 정의합니다 . 따라서 글을 쓰는 것보다 new Label("AB")단순히 글을 쓰는 것이 더 관습적일 것 Label("AB")입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Scala : 변경 가능한 맵 맵 반복

분류에서Dev

변경 가능한 객체가있는 자동 속성

분류에서Dev

가변 생성자가있는 객체를 맵에 넣기

분류에서Dev

키가 객체 인 경우 맵의 키에서 값을 얻는 방법 js

분류에서Dev

Python-변경 가능한 객체를 대체하는 함수

분류에서Dev

변경 가능한 객체에 대한 재귀 함수

분류에서Dev

변경 가능한 필드를 사용한 객체 복제

분류에서Dev

불변 객체에 키 값 쌍이있는 새 객체 추가

분류에서Dev

Python 객체 클래스 변경 가능한 기본값

분류에서Dev

Java에서 변경 가능한 객체에 대한 변경 불가능한 참조 반환

분류에서Dev

변경 불가능한 객체로 전송 된 변경 메소드-[__NSCFDictionary setObject : forKey :]

분류에서Dev

변경 가능한 객체의 복사본을 사전 키로 사용

분류에서Dev

복잡한 객체가있는 JAXB 매핑 맵을 JSON으로

분류에서Dev

파이썬에서 변경 가능한 속성을 변경 불가능한 객체로 반환

분류에서Dev

메서드에서 변경 가능한 객체의 변경 불가능한 복사본 반환

분류에서Dev

Spring String 객체를 반복 가능한 json 객체로 변환

분류에서Dev

Kotlin에서 변경 가능한 두 맵의 합이 맵인 이유

분류에서Dev

자바에서 다른 변경 가능한 객체에 대한 참조를 가진 복제 객체

분류에서Dev

setter는 변경 가능한 객체와 어떻게 사용됩니까?

분류에서Dev

변경 가능한 객체가 언제 변경되었는지 왜 알 수 없습니까?

분류에서Dev

Python 목록에있는 변경 가능한 개체의 ID

분류에서Dev

4 개의 변수가있는 정의 된 함수의 값으로 맵 객체 변환

분류에서Dev

홀더 객체의 변경 가능하고 변경 불가능한 버전을 구현하는 패턴이 있습니까?

분류에서Dev

Core Data에서 변경 가능한 관리 객체 모델과 변경 불가능한 관리 객체 모델의 차이점은 무엇입니까?

분류에서Dev

JavaScript : 다른 객체가 다른 속성에 동일한 값을 가지고있는 경우 객체 값 변경

분류에서Dev

pandas 키가 객체 일 때 변경하는 방법

분류에서Dev

Reactjs 용 맵을 사용하여 위치에있는 객체 목록 변경

분류에서Dev

일반 추상 객체가있는 TypeScript 맵

분류에서Dev

중첩 된 개체 및 빌더가있는 변경 불가능한 값 개체

Related 관련 기사

  1. 1

    Scala : 변경 가능한 맵 맵 반복

  2. 2

    변경 가능한 객체가있는 자동 속성

  3. 3

    가변 생성자가있는 객체를 맵에 넣기

  4. 4

    키가 객체 인 경우 맵의 키에서 값을 얻는 방법 js

  5. 5

    Python-변경 가능한 객체를 대체하는 함수

  6. 6

    변경 가능한 객체에 대한 재귀 함수

  7. 7

    변경 가능한 필드를 사용한 객체 복제

  8. 8

    불변 객체에 키 값 쌍이있는 새 객체 추가

  9. 9

    Python 객체 클래스 변경 가능한 기본값

  10. 10

    Java에서 변경 가능한 객체에 대한 변경 불가능한 참조 반환

  11. 11

    변경 불가능한 객체로 전송 된 변경 메소드-[__NSCFDictionary setObject : forKey :]

  12. 12

    변경 가능한 객체의 복사본을 사전 키로 사용

  13. 13

    복잡한 객체가있는 JAXB 매핑 맵을 JSON으로

  14. 14

    파이썬에서 변경 가능한 속성을 변경 불가능한 객체로 반환

  15. 15

    메서드에서 변경 가능한 객체의 변경 불가능한 복사본 반환

  16. 16

    Spring String 객체를 반복 가능한 json 객체로 변환

  17. 17

    Kotlin에서 변경 가능한 두 맵의 합이 맵인 이유

  18. 18

    자바에서 다른 변경 가능한 객체에 대한 참조를 가진 복제 객체

  19. 19

    setter는 변경 가능한 객체와 어떻게 사용됩니까?

  20. 20

    변경 가능한 객체가 언제 변경되었는지 왜 알 수 없습니까?

  21. 21

    Python 목록에있는 변경 가능한 개체의 ID

  22. 22

    4 개의 변수가있는 정의 된 함수의 값으로 맵 객체 변환

  23. 23

    홀더 객체의 변경 가능하고 변경 불가능한 버전을 구현하는 패턴이 있습니까?

  24. 24

    Core Data에서 변경 가능한 관리 객체 모델과 변경 불가능한 관리 객체 모델의 차이점은 무엇입니까?

  25. 25

    JavaScript : 다른 객체가 다른 속성에 동일한 값을 가지고있는 경우 객체 값 변경

  26. 26

    pandas 키가 객체 일 때 변경하는 방법

  27. 27

    Reactjs 용 맵을 사용하여 위치에있는 객체 목록 변경

  28. 28

    일반 추상 객체가있는 TypeScript 맵

  29. 29

    중첩 된 개체 및 빌더가있는 변경 불가능한 값 개체

뜨겁다태그

보관