다른 모듈 접근하기
모듈이든 함수든, '::' 를 통해 계층 이동을 수행함.
use 키워드 사용하기
use 키워드를 사용하면 접근을 보다 편하게 할 수 있음.
use a::series::of; 는 of 모듈을 사용하겠다는 의미임. 이를 통해 of 모듈에 접근할 수 있음.
use 키워드는 정확히 지정된 그 항목만을 가지고 옴: 그 모듈의 자식까지 가지고 오진 않기 때문에, 아래와 같이 사용할 수는 없음.
of 모듈은 series 모듈의 자식 모듈이지만, use 로 지정된 것은 어디까지나 series 모듈임. 때문에 이 경우 아래와 같이 사용해야 함.
특정 함수만을 가지고 올 수도 있음.
enum 도 모듈과 같은 하나의 형태를 가지기 때문에, enum 타입을 가지고 오는 일도 가능함. 그것도, enum 타입의 특정 항목만을 가지고 올 수도 있음.
같은 TrafficLight 타입이라도, Red, Yellow 는 use 를 통해 불러왔기에 바로 접근 가능하지만, Green 의 경우 TrafficLight::Green 의 방식으로 접근해야 함.
모든 enum 항목을 나열하는 일은 번거롭기에, 아래와 같은 처리도 가능.
이제 TrafficLight 의 모든 항목을 바로 접근할 수 있음.
super 키워드 사용하기
다른 스코프의 항목 호출 시, 맨 앞에 '::' 을 사용함은 루트에서부터 접근함을 의미함.
::a::series::of::nested_modules(); // 루트 경로의 a 모듈에서부터 접근
파일 시스템에서 루트로 접근할 때와 같이, 루트를 통해 모든 모듈의 경로를 찾아갈 수 있지만, 때로는 상대경로가 편함. super 키워드를 사용하면 바로 위의 부모 모듈에 접근할 수 있음.
super::super::some_function(); // 2단계 상위 모듈의 some_function 호출