mod
मॉड्यूल घोषणा है। यह निर्देश एक मॉड्यूल और इसकी सभी सामग्री की घोषणा करता है। ऐसा ही होता है कि ये सामग्री किसी अन्य फ़ाइल में स्थित हो सकती है। तो यह: के बाद से mod
एक मॉड्यूल की एक घोषणा है
mod game {
// game.rs contents
}
mod matrix {
// matrix.rs contents
}
स्वाभाविक रूप से, आप एक ही मॉड्यूल के लिए इसे कई बार ऐसा नहीं कर सकते:
mod game;
mod matrix;
मोटे तौर पर इस के बराबर है। यही कारण है, आप कोशिश करते हैं और
mod game {
mod matrix;
...
}
mod matrix;
की तरह कुछ लिख सकते हैं लेकिन, जैसा कि आप देख सकते हैं, matrix
और game::matrix
अलग मॉड्यूल हैं, और स्वाभाविक रूप से उनके संबंधित फाइलों को अलग अलग रास्तों की आवश्यकता है rustc, अगर वे बाहरी हैं।
use
, हालांकि, आयात घोषणा है। use
घोषणाएं मौजूदा मॉड्यूल में उपयोग के लिए अन्य मॉड्यूल से नाम खींचती हैं। आप इस मॉड्यूल के कहीं भी कहीं भी किसी भी मॉड्यूल और किसी भी सार्वजनिक आइटम से use
कर सकते हैं।
// game.rs
use matrix;
जाहिर है, इस के लिए काम करने के लिए matrix
टोकरा जड़ में mod
साथ घोषित किया जाना चाहिए:
तो, क्रम game
से matrix
को संदर्भित करने में आप इसे use
की जरूरत है।
एक साइड नोट के रूप में, मैं व्यक्तिगत रूप से सोचता हूं कि जंग मॉड्यूल सिस्टम को समझने का सबसे आसान तरीका यह है कि मॉड्यूल को अलग-अलग फाइलों में रखा जा सकता है। ऐसा लगता है कि एक क्रेट को केवल एक फ़ाइल में परिभाषित किया जा सकता है। जंग में mod
निर्देशों निकायों हो सकता है और घोंसला, तो नेस्टेड mod
रों वास्तव में एक टोकरा के मॉड्यूल प्रणाली को परिभाषित कर सकते हैं:
mod foo {
mod bax {
...
}
mod baz {
...
}
}
mod bar {
mod qux {
mod zux {
...
}
}
}
आप केवल एक ही फ़ाइल है, तो आप आसानी से कैसे mod
और use
निर्देशों काम करेगा देख सकते हैं , और मॉड्यूल के बीच संबंध स्पष्ट होना चाहिए।
और अब आप केवल तस्वीर के लिए तथ्य यह है कि अगर एक मॉड्यूल mod name;
में की तरह, एक शरीर के बिना घोषित किया जाता है, इसकी सामग्री भरी हुई है कि या तो name.rs
या name/mod.rs
से, जो कुछ भी उपलब्ध है जोड़ने की जरूरत है। हालांकि, पूरी तस्वीर थोड़ी सी नहीं बदलती है - ये अभी भी नेस्टेड मॉड्यूल हैं जो हमेशा को नेस्टेड mod
निर्देशों के साथ एक एकल स्रोत फ़ाइल के रूप में प्रदर्शित किया जा सकता है। वास्तव में, cargo rustc -Z unstable-options --pretty=normal
बाहरी स्रोत फ़ाइलों के सभी मॉड्यूल को एक दस्तावेज़ में इकट्ठा करने के बाद, इस फ़ॉर्म में अपने क्रेट को प्रिंट करेगा। मैं जटिल मॉड्यूल संरचना के साथ कुछ crates पर यह आदेश चलाने का सुझाव देता हूं यह देखने के लिए कि यह अभ्यास में कैसा दिखता है।
[इस उत्तर] पर एक नज़र डालें (http://stackoverflow.com/a/22597760/994206)। यह [ट्यूटोरियल] में भी शामिल है (http://static.rust-lang.org/doc/master/book/crates-and-modules.html) – Mokosha