https://www.tutorialspoint.com/rust/rust_modules.htm
Module은 코드의 논리적 그룹
여러 모듈이 crate라는 단위로 컴파일됨
Rust는 바이너리 crate나 라이브러리 create를 포함 할 수 있음
바이너리 crate는 main() 메서드가 있는 실행 가능한 프로젝트
라이브러리 crate는 다른 프로젝트에서 재사용 할 수 있는 컴포넌트 그룹
라이브러리 crate는 바이너리 crate와 달리 진입점(main() 메서드)가 없음
Cargo tool은 crate를 관리하는데 사용
Module은 다른 프로그래밍 언어의 namespace와 유사
crate.io에서 crate를 다운받아 사용 가능
Sr.No. | Term | Description |
---|---|---|
1 | module | crate 내에서 논리적으로 그룹화된 코드 집합 |
2 | crate | Rust의 컴파일 단위로 바이너리 또는 라이브러리로 컴파일 됨 |
3 | cargo | crate에 대한 공식 Rust 패키지 관리 도구 |
4 | crate.io | 공식 Rust 패키지 저장소 |
//public module
pub mod a_public_module {
pub fn a_public_function() {
//public function
}
fn a_private_function() {
//private function
}
}
//private module
mod a_private_module {
fn a_private_function() {
}
}
Module은 public 또는 private
private은 다른 module에서 접근 할 수 없음
Rust의 module은 기본적으로 private
public module로 설정 하려면 pub 키워드를 사용
pub mod movies {
pub fn play(name:String) {
println!("Playing movie {}",name);
}
}
fn main(){
movies::play("Herold and Kumar".to_string());
}
use 키워드는 공개 모듈을 가져오는 데 사용
use public_module_name::function_name;
pub mod movies {
pub fn play(name:String) {
println!("Playing movie {}",name);
}
}
use movies::play;
fn main(){
play("Herold and Kumar ".to_string());
}
module은 중첩될 수 있음
pub mod movies {
pub mod english {
pub mod comedy {
pub fn play(name:String) {
println!("Playing comedy movie {}",name);
}
}
}
}
use movies::english::comedy::play;
// importing a public module
fn main() {
// short path syntax
play("Herold and Kumar".to_string());
play("The Hangover".to_string());
//full path syntax
movies::english::comedy::play("Airplane!".to_string());
}
[package]
name = "movies_lib"
version = "0.1.0"
authors = ["Mohtashim"]
pub mod movies;
pub fn play(name:String){
println!("Playing movie {} :movies-app",name);
}
라이브러리 crate 폴더의 root에서 cargo build 명령을 이용하여 빌드
폴더 및 파일 생성
[package]
name = "test_for_movie_lib"
version = "0.1.0"
authors = ["Mohtashim"]
[dependencies]
movies_lib = { path = "../movie-lib" }
extern crate movies_lib;
use movies_lib::movies::play;
fn main() {
println!("inside main of test ");
play("Tutorialspoint".to_string())
}