我知道如何使用像Java這樣的繼承語言或類似JavaScript的無類型語言來製作相關事物的列表,但我無法弄清楚如何在Rust中執行此操作。這將產生一個錯誤,因爲在編譯時Dereference
中的數組大小未知。不帶繼承的不同事物的列表?
#[derive(PartialEq, Eq, PartialOrd, Ord)]
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
}
struct Dereference<'a> {
set: [&'a Appearance<'a>]
}
fn main() {
let r = "hair_color";
let i1 = 42;
let i2 = 43;
let a1 = Appearance{identity: &i1, role: r};
let a2 = Appearance{identity: &i2, role: r};
let d1 = Dereference{set: [&a1]};
let d2 = Dereference{set: [&a1, &a2]};
let list: Vec<Dereference> = vec!(d1, d2);
}
然而,set
構件在Dereference
將陣列高達小尺寸。比方說少於32,最常見的是1或2,很少3,並且幾乎沒有那麼大。我可以創建32個結構體和32個列表,但爲了方便起見,我真的希望以更智能的方式來完成此操作。即使我必須創建32個結構,至少單個列表也會有很大的幫助。我需要這個同時成爲內存和性能高效。我如何在Rust中實現這一點?
你需要'Dereference'結構嗎? [你可以直接使用切片](https://play.rust-lang.org/?gist=16de06c82ec2ddbe2f288386aa5336d8&version=stable&backtrace=0) – red75prime
我相信我這樣做,因爲對Dereference的引用將被包含在另一個名爲Posit的結構體中,而我將需要一個從Dereference實例的查找表到引用該特定實例的Posit的所有實例。 –
這不是問題。你可以使用'&[Appearance]'而不是'Derefenence <'a>'。但值得記住的是,Rust默認使用結構相等。如果兩個參考指向不同但相同的結構,則認爲它們相等。 – red75prime