기준 치수
모드 및 파일 시스템
$ cargo new communicator --lib
$ cd communicator
그러면 src/lib.rs가 생성됩니다.
mod client {
fn connect() {
}
}
mod network {
fn connect() {
}
mod server {
fn connect() {
}
}
}
---------------------------
communicator
├── client
└── network
└── server
lib.rs 파일에서 두 개의 파일로 분할하면 mod client; 거기에 모듈을 정의하기 위해 client.rs라는 파일을 만듭니다. 그런 식으로 작성하면 Rust는 lib.rs에서 클라이언트 모듈을 선언하지만 코드 블록을 세미콜론으로 바꾸면 Rust 컴파일러가 다른 곳에서 클라이언트 모듈을 찾도록 강제합니다.
mod client {
// contents of client.rs
}
모드 클라이언트; 즉, 블록의 내용이 client.rs에 있으므로 client.rs라는 파일을 만들고 그 안에 함수를 작성해야 합니다.
이 파일은 클라이언트 모듈의 내용만 제공하므로 mod 클라이언트를 재정의하면 클라이언트 모듈 내에 하위 모듈이 생성됩니다.
파일 시스템 규칙
- foo라는 모듈에 하위 모듈이 없으면 foo.rs라는 파일에 foo에 대한 선언을 배치해야 합니다.
- foo에 하위 모듈이 있으면 foo/mod.rs라는 파일에 foo에 대한 선언을 넣어야 합니다.
이러한 규칙은 재귀적으로 적용되므로 foo라는 모듈에 bar라는 하위 모듈이 있고 `bar에 하위 모듈이 없으면 src 디렉토리에 다음 파일이 있어야 합니다.
├── foo
│ ├── bar.rs (contains the declarations in `foo::bar`)
│ └── mod.rs (contains the declarations in `foo`, including `mod bar`)
가시성 확인
extern crate communicator;
fn main() {
communicator::client::connect();
}
Communicator 라이브러리 상자를 가져오려면 extern crate 명령을 사용
Rust의 모든 코드에 대한 기본 상태는 비공개입니다.
기밀 유지 규칙
- 요소가 공개되면 상위 모듈의 어디에서나 액세스할 수 있습니다.
- 요소가 개인용인 경우 동일한 파일 내의 상위 모듈과 해당 하위 모듈에서만 액세스할 수 있습니다.
사용 사용
pub mod a {
pub mod series {
pub mod of {
pub fn nested_modules() {}
}
}
}
enum TrafficLight {
Red,
Yellow,
Green,
}
use a::series::of;
use TrafficLight::{Red, Yellow};
use TrafficLight::*; // 이와같이 glob하게 가져올 수도 있음. name conflict 주의!
fn main() {
of::nested_modules();
}
![라즈베리 주스 슈퍼 라즈베리 [요리리포트] 완주베리 블랙베리 80ml x 20팩 라즈베리 주스 슈퍼 라즈베리 [요리리포트] 완주베리 블랙베리 80ml x 20팩](https://contents.lotteon.com/itemimage/_v061433/LO/20/76/45/86/83/_2/07/64/58/68/4/LO2076458683_2076458684_1.jpg/dims/optimize/dims/resizemc/400x400)