다음으로 이 가이드를 나는화물 프로젝트를 만들었습니다.
src/main.rs
fn main() {
hello::print_hello();
}
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
내가 사용하는
cargo build && cargo run
오류없이 컴파일됩니다. 이제 기본 모듈을 두 개로 분할하려고하지만 다른 파일의 모듈을 포함하는 방법을 알 수 없습니다.
내 프로젝트 트리는 다음과 같습니다.
├── src
├── hello.rs
└── main.rs
및 파일의 내용 :
src/main.rs
use hello;
fn main() {
hello::print_hello();
}
src/hello.rs
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
내가 그것을 컴파일 cargo build
하면
error[E0432]: unresolved import `hello`
--> src/main.rs:1:5
|
1 | use hello;
| ^^^^^ no `hello` external crate
나는 컴파일러의 제안을 따르고 다음과 같이 수정 main.rs
했습니다.
#![feature(globs)]
extern crate hello;
use hello::*;
fn main() {
hello::print_hello();
}
그러나 이것은 여전히별로 도움이되지 않습니다.
error[E0463]: can't find crate for `hello`
--> src/main.rs:3:1
|
3 | extern crate hello;
| ^^^^^^^^^^^^^^^^^^^ can't find crate
현재 프로젝트의 모듈 하나를 프로젝트의 기본 파일에 포함시키는 방법에 대한 간단한 예가 있습니까?
답변
당신은 필요하지 않습니다 mod hello
당신의 hello.rs
파일. 모든 파일의 코드 ( main.rs
실행 파일 용, lib.rs
라이브러리 용)는 자동으로 모듈에 네임 스페이스가 지정됩니다.
의 코드 포함하려면 hello.rs
당신의 main.rs
사용을 mod hello;
. hello.rs
이전에했던 것과 똑같이 안에있는 코드로 확장됩니다 . 파일 구조는 동일하게 유지되며 코드를 약간 변경해야합니다.
main.rs
:
mod hello;
fn main() {
hello::print_hello();
}
hello.rs
:
pub fn print_hello() {
println!("Hello, world!");
}
답변
중첩 된 모듈을 원할 경우 …
Rust 2018
있어 더 이상 필요하지 않습니다 파일을 가지고 mod.rs
(여전히 지원되지만). 관용적 대안은 파일 이름을 모듈 이름으로 지정하는 것입니다.
$ tree src
src
├── main.rs
├── my
│ ├── inaccessible.rs
│ └── nested.rs
└── my.rs
main.rs
mod my;
fn main() {
my::function();
}
my.rs
pub mod nested; // if you need to include other modules
pub fn function() {
println!("called `my::function()`");
}
Rust 2015
mod.rs
모듈과 같은 이름의 파일을 폴더에 넣어야 합니다. Rust by Example 이 더 잘 설명합니다.
$ tree src
src
├── main.rs
└── my
├── inaccessible.rs
├── mod.rs
└── nested.rs
main.rs
mod my;
fn main() {
my::function();
}
mod.rs
pub mod nested; // if you need to include other modules
pub fn function() {
println!("called `my::function()`");
}
답변
나는 Gardener의 반응을 정말 좋아합니다. 내 모듈 선언에 대한 제안을 사용하고 있습니다. 기술적 인 문제가 있으면 누군가 차임 해주세요.
./src
├── main.rs
├── other_utils
│ └── other_thing.rs
└── utils
└── thing.rs
main.rs
#[path = "utils/thing.rs"] mod thing;
#[path = "other_utils/other_thing.rs"] mod other_thing;
fn main() {
thing::foo();
other_thing::bar();
}
utils / thing.rs
pub fn foo() {
println!("foo");
}
other_utils / other_thing.rs
#[path = "../utils/thing.rs"] mod thing;
pub fn bar() {
println!("bar");
thing::foo();
}