文檔列表見:Rust 移動端跨平臺複雜圖形渲染項目開發系列總結(目錄)git
一般,C/C++經過#include
導入外部符號(不考慮extern
和前置聲明的狀況)。Rust沒頭文件,由use
導入外部符號,相似Java的import
,可是Rust不用Java包名那種倒URL作法,而是採用了相似C++命名空間的方案,經過mod
聲明模塊用以區分來自不一樣模塊或文件的符號。示例以下:github
#include "OpenGLES/ES2/gl.h"
#include "Framebuffer.h"
use namespace my_package_1::ClassHello;
use namespace my_package_2::ClassWorld;
複製代碼
Rust經過as關鍵字解決多個模塊中符號重名問題。數據結構
use OpenGLES::ES2::gl::*;
use Framebuffer::*;
use mod_1::MyStruct as Mod1MyStruct;
use mod_2::MyStruct as Mod2MyStruct;
複製代碼
當C++包含兩個同名文件時,須要帶上路徑進行區分。多個命名空間中存在同名類時,每次使用都得用完整符號名進行區分,即Namespace1::Namespace2::NamespaceN::MyClass,代碼比較頻繁。 Rust在處理這一問題有更好的解決方案:as
重命名避免衝突。可是,經過我實踐發現,使用完整模塊路徑及類型名更直觀,相似C++的作法。app
使用*
導入全部符號雖然方便,可是會消耗更多編譯時間,所以枚舉當前文件使用的符號是更好的實踐。post
進階:self
關鍵字可導入mod.rs文件或者與上層目錄同名的rs文件。 示例以下:spa
// 此處self表示rc.rs,由於rc模塊內部沒切成多個目錄組織源碼
use std::rc::{self, Rc, Weak};
// 此處self表示rc目錄下的mod.rs文件
use std::io::{self, Read, Write};
複製代碼
導入多個二級模塊及某一模塊數據結構的示例:code
use hal::{
buffer, format as f, window::Extent2D,
};
複製代碼
導入多級模塊及模塊內數據結構的示例:orm
// https://github.com/amethyst/amethyst/blob/v0.9.0/examples/fly_camera/main.rs
use amethyst::{
assets::{PrefabLoader, PrefabLoaderSystem, RonFormat},
controls::FlyControlBundle,
core::transform::TransformBundle,
input::InputBundle,
prelude::*,
renderer::{DrawShaded, PosNormTex},
utils::{application_root_dir, scene::BasicScenePrefab},
Error,
};
複製代碼