2017-10-19 1 views
0

나는 같은 디렉토리에있는 세 개의 파일들로 구성된 Cargo 프로젝트를 가지고있다 : main.rs, mod1.rs 그리고 .Cargo/Rust를 사용하여 동일한 디렉토리의 파일을 모듈에 포함시키는 방법은 무엇입니까?

은 내가 mod1.rs에서 main.rs에 기능을 가져 오는 것과 같은 방법을 mod1.rs하는 mod2.rs에서 기능을 가져올.
필자는 필요한 파일 구조에 대해 읽었지만 가져 오지는 못했습니다 - 가져온 모든 파일의 이름 지정 mod은 편집기에서 사소한 혼동을 유발할뿐 아니라 프로젝트 계층을 복잡하게 만듭니다.

파이썬 또는 C++ 에서처럼 파일을 디렉토리 구조와 독립적으로 가져 오거나 포함시키는 방법이 있습니까?

main.rs :

mod mod1; // Works 

fn main() { 
    println!("Hello, world!"); 
    mod1::mod1fn(); 
} 

mod1.rs :

mod mod2; // Fails 

pub fn mod1fn() { 
    println!("1"); 
    mod2::mod2fn(); 
} 

mod2.rs :에

pub fn mod2fn() { 
    println!("2"); 
} 

건물 결과 :

error: cannot declare a new module at this location 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 
    | 
note: maybe move this module `src` to its own directory via `src/mod.rs` 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 
note: ... or maybe `use` the module `mod2` instead of possibly redeclaring it 
--> src\mod1.rs:1:5 
    | 
1 | mod mod2; 
    |  ^^^^ 
,

어디서나 모듈로 존재하지 않기 때문에 use을 사용할 수 없으며 디렉토리 구조를 수정하고 싶지 않습니다.

답변

2

당신의 최상위 모듈 선언의 모든과 같이, main.rs에 가야한다 :

mod mod1; 
mod mod2; 

fn main() { 
    println!("Hello, world!"); 
    mod1::mod1fn(); 
} 

을 그런 다음 use mod2mod1 안에 할 수

use mod2; 

pub fn mod1fn() { 
    println!("1"); 
    mod2::mod2fn(); 
} 

나는 the chapter on modules in the new version of the Rust book를 읽고 권하고 싶습니다 만약 당신이 천국 ' 이미 - 그들은 언어에 익숙하지 않은 사람들에게 조금 혼란 스러울 수 있습니다.

+1

정말 고마워요! 나는 그런 옵션이 없다고 거의 확신했다. – Neo

+0

나는 그 장을 읽었지만, 그 장에서 내가 당신이 묘사하는 것을 할 수 있다는 것을 이해하지 못했다. – Neo

+1

@ 네오 : 괜찮습니다! 일단 모듈 시스템이 마음에 든다면 이해가되지만, 분명히 약간의 학습 곡선이 있습니다. [현재 약간의 작업을 단순화하기위한 작업이 있습니다.] (https://github.com/rust- lang/rfcs/pull/2126). –

관련 문제