2015-06-05 12 views
5

मैं rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14) उपयोग कर रहा हूँ में हैं और मैं निम्नलिखित सेटअप मिल गया है:पहुँच submodule जब दोनों submodules एक ही मुख्य मॉड्यूल

my_app/ 
| 
|- my_lib/ 
| | 
| |- foo 
| | |- mod.rs 
| | |- a.rs 
| | |- b.rs 
| | 
| |- lib.rs 
| |- Cargo.toml 
| 
|- src/ 
| |- main.rs 
| 
|- Cargo.toml 

src/main.rs:

extern crate my_lib; 

fn main() { 
    my_lib::some_function(); 
} 

my_lib/lib.rs:

pub mod foo; 

fn some_function() { 
    foo::do_something(); 
} 

my_lib/foo/mod.rs:

pub mod a; 
pub mod b; 

pub fn do_something() { 
    b::world(); 
} 

my_lib/foo/a.rs:

pub fn hello() { 
    println!("Hello world"); 
} 

my_lib/foo/b.rs:

use a; 
pub fn world() { 
    a::hello(); 
} 

Cargo.toml:

[dependencies.my_lib] 
path = "my_lib" 

मैं करने का प्रयास करते इसे संकलित करें में use कथन के लिए मुझे निम्न त्रुटि फेंक दी गई है:

unresolved import `A`. There is no `A` in `???` 

मुझे क्या याद आ रही है? धन्यवाद।

उत्तर

7

समस्या यह है कि use पथ पूर्ण हैं, से संबंधित नहीं हैं। जब आप use A; कहते हैं कि आप वास्तव में क्या कह रहे हैं "इस क्रेट के रूट मॉड्यूल में A प्रतीक का उपयोग करें", जो lib.rs होगा।

आपको उपयोग करने की आवश्यकता है use super::A;, या पूर्ण पथ: use foo::A;

मैंने Rust's module system and how paths work पर एक लेख लिखा है जो Rust Book chapter on Crates and Modules नहीं करता है, तो इसे साफ़ करने में सहायता कर सकता है।

+0

हाँ क्षमा करें, 'बी :: दुनिया()' वास्तव में किसी अन्य फ़ंक्शन में लपेटा गया है। मैं प्रोजेक्ट संकलित करने के लिए कार्गो का उपयोग कर रहा हूं। तब कार्गो में एक बग हो सकता है? – morcmarc

+0

यदि कार्गो का उपयोग पुन: उत्पन्न करने के लिए आवश्यक है, तो कृपया अपनी 'Cargo.toml' फ़ाइल पोस्ट करें। जैसा कि यह खड़ा है, उदाहरण के रूप में उदाहरण संकलित बस ठीक है। –

+0

यह काम किया। इसे स्पष्ट करने के लिए धन्यवाद। क्या यह मूर्खतापूर्ण है हालांकि 'सुपर :: मॉड्यूल_नाम' का उपयोग करना है? यह थोड़ा अजीब लगता है। – morcmarc

संबंधित मुद्दे