복붙노트

[SCALA] 스칼라 생성자 매개 변수의 기본 개인 발을합니까?

SCALA

스칼라 생성자 매개 변수의 기본 개인 발을합니까?

나는 시도하고있다 :

class Foo(bar: Int)

대 :

class Foo(private val bar: Int)

그들은 내가 그 (막대 말을 어디서든 찾을 수 있지만 동일하게 동작하는 것 : INT가) (개인 발 줄로 확장 : INT) 그래서 내 질문은, 다음은 유사 / 동일?

이 코드 조각과 그들이에 타이 퍼 : 보조 노트에, 나는 -Xprint를 사용하는 것을 시도하고있다 두번째의 추가 라인을 제외하고 동일한 부호를 생성한다. 내가 어떻게 할 그 여분의 라인을 읽어?

..
class Foo extends scala.AnyRef {
  <paramaccessor> private[this] val bar: Int = _;
  def <init>(bar: Int): this.Foo = {
    Foo.super.<init>();
    ()
  }
}
..


..
class Foo extends scala.AnyRef {
  <paramaccessor> private[this] val bar: Int = _;
  <stable> <accessor> <paramaccessor> private def bar: Int = Foo.this.bar;
  def <init>(bar: Int): this.Foo = {
    Foo.super.<init>();
    ()
  }
}
..

해결법

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

    1.바 : Int 인

    바 : Int 인

    이것은 거의 생성자 매개 변수입니다. 이 변수가 어디 생성자를 제외하고 사용하지 않으면이 남아있다. 어떤 필드가 생성되지 않습니다. 그렇지 않으면 개인 발 바 필드가 작성되어 줄 매개 변수의 값은 할당됩니다. 어떤 게터이 만들어지지 않습니다.

    개인 발 바 : 지능

    매개 변수의 이러한 선언은 개인 게터와 개인 발 바 필드를 생성합니다. 파라미터 생성자 (예컨대 된 toString () 또는 생략) 옆에 사용 된 경우에 이러한 문제가없이 상기와 동일하다.

    바 가치 : 지능

    이상하지만 스칼라 같은 게터와 동일는 공개

    바 : 경우 클래스의 지능

    경우 수업 참여 때, 기본적으로 각 매개 변수는 발 수정이 있습니다.

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

    2.첫 번째 경우, 줄은 ​​생성자 파라미터이다. 주요 생성자는 클래스 자체의 내용이기 때문에,하지만 바로이 예에서, 거기에 액세스 할 수 있습니다. 그래서 거의 동일합니다 :

    첫 번째 경우, 줄은 ​​생성자 파라미터이다. 주요 생성자는 클래스 자체의 내용이기 때문에,하지만 바로이 예에서, 거기에 액세스 할 수 있습니다. 그래서 거의 동일합니다 :

    class Foo(private[this] val bar:Int)
    

    한편, 두 번째 경우 줄에 일반 민간 분야이므로이 인스턴스와 푸의 다른 인스턴스에 액세스 할 수 있습니다. 예를 들어,이 미세 컴파일합니다 :

    class Foo(private val bar: Int) {
      def otherBar(f: Foo) {
        println(f.bar) // access bar of another foo
      }
    }
    

    그리고 실행 :

    scala> val a = new Foo(1)
    a: Foo = Foo@7a99d0af
    
    scala> a.otherBar(new Foo(3))
    3
    

    하지만이되지 않습니다 :

    class Foo(bar: Int) {
      def otherBar(f: Foo) {
        println(f.bar) // error! cannot access bar of another foo
      }
    }
    
  3. from https://stackoverflow.com/questions/14694712/do-scala-constructor-parameters-default-to-private-val by cc-by-sa and MIT license