내가 가지고있는 다음과 같은 클래스 설정 : 다음왜 내 개체 멤버 변수에 액세스 할 수 없습니까?
class MyClass {
class MyInnerClass(memberVar: String)
def getAInner: MyInnerClass = {
new MyInnerClass("hello")
}
}
내가 가지고있는 클래스의 외부에 다음 코드 : 왜이
def myFunction = {
val a = new MyClass
val b = a.getAInner.memberVar // value memberVar is not a member of a.MyInnerClass
}
입니까? 노아의 대답은 완전히 정확 @
class MyClass {
class MyInnerClass(val memberVar: String)
def getAInner: MyInnerClass = {
new MyInnerClass("hello")
}
}
'사례 클래스'가 정확히 무엇에 관한 정보를 제공 할 수 있습니까? 그것은 기본적으로 클래스의 인스턴스를 구조체로 변환합니까? – Max
@Max는 몇 가지 참조를 추가했습니다. "구조체"가 의미하는 바에 따라 그것이 맞다고 말할 수있을 것입니다. 대부분의 구문 설탕은 자동으로 활성화됩니다. 99 %의 시간 동안 패턴 일치와 같은 새로운 스칼라 기능을 가능하게하고 싶습니다. – acjay
@acjay 케이스 클래스를 사용하면 일반 클래스 컨텍스트에서는 덜 관용적 인'new' 키워드를 버릴 수 있습니다. 사례 클래스의 예로는'Some'와'None'이 있으며'new' 될 필요는 없습니다. case 클래스는 클래스에서 객체를 "래핑"하기위한 것입니다. 위 예제의 경우, (예를 들어'Some' 또는'Left' 또는'Success'와 같이) wrapped 할 필요가 없으므로, case 클래스의 사용은이 경우 관용적이지 않습니다. 그것에 대해 생각해 볼 수있는 또 다른 방법은 "패턴 매칭 할 필요가없는 경우 사례 클래스를 사용하지 마십시오." –