내 개인적인 불변 클래스 생성자 및 보조 생성자가 범위 내 클래스의 다른 요소없이 첫 번째 문으로 서로를 호출해야하는 제약 조건과 싸우는 동안 필자는 내 인스턴스 생성을위한 보조 개체를 사용하도록 제한되어있는 것처럼 보입니다. 내 동반자 개체는 주 생성자에 액세스해야하므로 해당 개체를 포함하는 범위를 대상으로하려면 private 키워드가 필요합니다. 이제 스칼라에서 클래스를 해당 객체 안에 선언 할 수 있습니까?
, 내 뇌가 이름 생성에 약한, 나는 객체 자체 동반자 내에서 내 수업을 배치하여 그 동반자 객체와 클래스 모두 바깥 쪽 네임 스페이스의 필요성을 저장하려고,이 방법 :object Group {
private def complexComputeX(z: Int) = z
private def complexComputeY(x: Int, z: Int) = x + z
def apply(z: Int) = {
val x = complexComputeX(z)
val y = complexComputeY(x, z)
new Group(x, y)
}
class Group private[Group](x: Int, y: Int) {
//...
}
}
val x = Group(5)
//...
Group
이 private[Group]
인 것은 개체를 참조하지 않지만 클래스는 여전히 불필요합니다.
컴패니언 개체 수준에서 사용할 수 있도록 해당 생성자를 태그 할 수 있지만 외부에서는 사용할 수 없도록하려면 어떻게해야합니까?
PS : ...
편집을 그 동반자 개체가 이미 나에게 두통을주고있다, 나는 심지어 KO-범위 지정 여러 생성자의 구현이 필요로 할 수있는 complexCompute
를,이 그냥 수업을하는 것이 바람직 것 : 좋아 . 태그를 추가하는 동안 나는 동반자 객체가 클래스의 범위에 대한 특권을 가질 수 있다고 저를 울리는 뉴런을 쳤습니다. 자체 파트에 액세스 할 수 있으므로 전용 인 클로징 범위가 없으면 단순히 객체와 클래스를 나란히 가질 수 있습니다. 그러나 나는 그러한 복싱 케이스에 대한 범위 지정을 처리 할 수있는 가능성있는 방법에 대한 응답과 동반자 개체가없는 클래스의 생성자 만 사용하는 기술에 대한 설명을 제공합니다.
원래 "Scala에서 외부 범위를 참조 할 수 있습니까?"라는 질문을 변경했습니다. 나는 내가 시도 할 또 다른 이유를 찾았다면 그것을 따로 따로 구할 것이라고 생각한다. (내 이름은 레벨이 같은 이름을 가지고있을 때 개인 레벨을 정확하게 지정할 방법이 없다는 것이다.) – Nirvana