복붙노트

[SCALA] 스칼라에서, 할당 연산자 "="메소드 호출은?

SCALA

스칼라에서, 할당 연산자 "="메소드 호출은?

스칼라 책에 관해서는, "스칼라 프로그래밍"-

스칼라는 순수한 형태의 객체 지향 언어이다 : 모든 값은 객체이며 모든 작업은 메소드 호출이다. 예를 들어, 스칼라 1 + 2, 당신은 실제로 +라는 이름의 클래스 지능에 정의 된 메소드를 호출하는 말할 때.

그런 의미에서, 할당 작업에 대한 어떤 일이 "="연산자를 사용하고 계십니까? 그 또한 방법인가? 다음은 모든 클래스에서 상속해야하는 모든 클래스 나 일반적인 슈퍼 클래스 (예를 들어, java.lang.Object 상위?)에 존재하기 때문에, 가능성이 보인다. 아니면 모든 작업이 정말 스칼라에서 메서드 호출 있다는 것입니다?

해결법

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

    1.아니. 할당 연산자 (=) 예약어이다. 또한 다음은 다음과 같습니다 :

    아니. 할당 연산자 (=) 예약어이다. 또한 다음은 다음과 같습니다 :

    보다 포괄적 인 목록은 1.1 § 참조하십시오. = 대한 일부 자세한 내용은 § 6.12.4에 설명되어 있습니다.

    그래서 네는 메소드 호출되지 않습니다.

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

    2.Jatin의 대답에 약간의 추가. 이 =이 메서드 호출로 간주 될 수있는 한 경우이지만, 실제로는 단지 문법 설탕입니다. 추악한 생명을 바르 스칼라의 OO 부분에서는 다음을 작성할 수 있습니다 :

    Jatin의 대답에 약간의 추가. 이 =이 메서드 호출로 간주 될 수있는 한 경우이지만, 실제로는 단지 문법 설탕입니다. 추악한 생명을 바르 스칼라의 OO 부분에서는 다음을 작성할 수 있습니다 :

    class Test { 
      private var x0: Int = 0
      def x = x0
      def x_=(a: Int) = x0 = a 
    }
    

    그럼 당신은 X 새로운 int 치의을 할당 할 수 있습니다 :

    scala> val t = new Test
    t: Test = Test@4166d6d3
    
    scala> t.x = 1
    t.x: Int = 1
    

    마지막 줄 t.x _ = 1로 desugared한다. 나는 그것이 = 그런 말을하는 것이 가능 메소드 호출이다, 문법 설탕을 고려,이 경우 생각합니다.

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

    3.다른 답변은 표준 스칼라에 대한 올바른 있지만,이 스칼라 - 가상화 된 곳이라는 변종이다 = 및 다른 제어 구조는 메소드 호출이다.

    다른 답변은 표준 스칼라에 대한 올바른 있지만,이 스칼라 - 가상화 된 곳이라는 변종이다 = 및 다른 제어 구조는 메소드 호출이다.

  4. from https://stackoverflow.com/questions/19086851/in-scala-is-assignment-operator-a-method-call by cc-by-sa and MIT license