2012-10-10 7 views
2

난 그냥 클래스와 객체 및 스칼라에 대해 배우고, 어제 내가 이런 걸 보았다클래스 정의에 전달 된 매개 변수를 사용할 수있는 이유는 무엇입니까?

class Foo(bar: Int) { 
    def increaseByOne = bar + 1 
} 

가 왜이 방법 increaseByOnebar를 사용할 수 오전? 메서드 정의가 bar을 알지 못한다고 불평 할 것이라고 기대합니다.

나는 이러한 클래스를 정의하는 올바른 방법이 경우 bar에서

class Foo(x: Int) { 
    val bar = x 

    def increaseByOne = bar + 1 
} 

답변

7

: 당신이 생성자가 아닌 임의의 방법에서 생성자 인수를 참조하는 경우, 스칼라가 자동으로 필드에 그 생성자 변수를 지정합니다. 따라서 Scala는 첫 번째 코드 스 니펫을 두 번째 코드 스 니펫으로 변환합니다 (private[this] 수정 자 포함).

또한, val/var와 생성자 인자를 이전하는 것은 물론 게터/세터를 생성합니다 : 매개 변수의 앞 발은/var을 넣어 무엇을 설명하기위한

class Foo(val bar: Int) 
val foo = new Foo(42); 
println(foo.bar) 
+0

1. 꽤 좋은 기능 :-). – helpermethod

2

private[this]로 정의하고 클래스 정의 내에서 acessed 할 수있을 것이지만. 당신은 -Xprint:typer 옵션을 확인할 수 있습니다

스칼라의 멋진 기능 중 하나
class Foo extends java.lang.Object with ScalaObject { 
    <paramaccessor> private[this] val bar: Int = _; 
    def this(bar: Int): $line1.$read.$iw.$iw.Foo = { 
    Foo.super.this(); 
    () 
    } 
} 
관련 문제