前言:我相當確定這應該是一件容易理解的事情,但我沒有任何運氣。我實際上一直在與貨運經理奮鬥,我一直希望它像C
中的簡單include
聲明,但它當然沒有那麼簡單。如果您對如何更好地構建此項目有所建議,請分享。使用Cargo在頂部製作較低等級的包裝箱
可以說,我有一個圖書館在魯斯與貨物管理。箱子被稱爲point
,目錄看起來像這樣。
point/
├── Cargo.lock
├── Cargo.toml
├── src
└── lib.rs
該箱子沒有依賴性。
現在,我已經建立了另一個庫,將使用這個point
箱。這個庫被稱爲sat
這個庫看起來是這樣的:
sat/
├── Cargo.lock
├── Cargo.toml
├── src
├── circle.rs
├── lib.rs
├── point/
└── polygon.rs
注意point/
是上面提到的點目錄。我之所以包括point
作爲一個單獨的庫,而不是作爲內sat
一個模塊,就是circle
和polygon
模塊都依賴於point
(我不能想出一個辦法讓point
在sat
作爲一個模塊工作不重複代碼,這與問題並不真正相關,但與慣用的Rust庫結構相關,所以請隨時對更好的方式進行評論)。
這裏是Cargo.toml
文件sat/
$ cat sat/Cargo.toml
[package]
name = "sat"
version = "0.1.0"
[dependencies]
point = { path = "src/point" }
現在,這一切都很好。但是,讓我們說我想創建一個使用sat
作爲外部箱子的應用程序。 如何在此應用程序中訪問point
庫,而無需包含point
庫本身?
下面是一個示例,point
庫中有一個名爲Point
的結構體。 sat
庫中有一個名爲Circle
的結構體。比方說,我的示例源代碼如下所示:
$ cat src/main.rs
extern crate sat;
// I don't want to have to include the point crate because it is already
// included in sat
// extern crate point;
fn main() {
// declare a polygon
// structure is: crate::module::struct::staticFunction
let polygon = sat::polygon::Polygon::new(<parameters>);
// I cannot declare a Point, because point is not a module in sat
// this errors out.
// However, this is the sort of thing that I would like to do.
let point = sat::point::Point::new(<parameters>);
}