2014-02-23 3 views
2

저는 스칼라 언어로 머리를 감싸려고 노력하고 있습니다. 배우기에 가장 좋은 방법은 그것을 실천하는 것입니다. 자바 프로젝트 (스프링)와 스칼라 프로젝트 사이에 코드를 복사 할 때 IDE가 변환을 수행 할 때 이해가되지 않습니다. 인터넷과 문서에서이 파일을 검색하면 안타깝게도 아무 것도 할 수 없습니다.개인용의 의미는 무엇입니까

코드 :

`error: context is not an enclosing class` 

이 사람이 무엇을 private[context] 부분 수단 설명 할 수 :

@Bean private[context] def passwordEncoder: PasswordEncoder = { 
    return new BCryptPasswordEncoder 
} 

컴파일러가 불평을 위의 코드를 컴파일?

답변

4

context은 메소드를 비공개로 설정하려는 컨텍스트를 채울 수있는 자리 표시 자에 지나지 않습니다. 이것은 선택적이지만. 컨텍스트를 지정하지 않으면 멤버는 "class-private"이되고 afaik는 Java에서 private처럼 동작합니다.

배경 : Scala는 두 가지 이상의 액세스 사양을 제공합니다. 객체 개인 사양 (예 : private[this])은 해당 객체가 다른 객체가 아니라 동일한 객체에서 호출 된 멤버 만 볼 수 있다고 규정합니다. 그들은 같은 유형입니다. this 대신 패키지 이름 또는 root을 사용할 수도 있습니다.이 이름은 루트 이름 공간의 별칭입니다.

개인 수정

템플릿의 모든 정의 나 선언으로 사용할 수있는 다음 Scala Language Reference의 - "수정 5.2 절"이에 대한

자세한 정보는에서 찾을 수 있습니다.

[...]

개질제는 클래스 또는 패키지의 정의를 둘러싸 나타내야 C 식별자 (예컨대 private[C])으로 규정 될 수있다. 이러한 변경자로 레이블이 붙은 멤버는 패키지 C 내의 코드 또는 클래스 C 및 그 부속 모듈 (§5.4) 내의 코드에서만 각각 액세스 할 수 있습니다.

+0

고마워요! 이것은 나에게 훨씬 더 분명했다. AccessQualifier에 대한 추가 정보를 얻기 위해 어디에서 스펙을 찾을 수 있는지 지적했다. – Bart