我刚开始学习Rust,来自Java/JavaScript背景,所以请耐心等待,因为我对生命时间的理解显然缺少一些东西.
fn main() {
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
};
impl<'a> PartialEq for Appearance<'a> {
fn eq(&self, other: &Appearance) -> bool {
self.identity == other.identity && self.role == other.role
}
};
let thing = 42u64;
let hair_color = "hair color";
let appearance = Appearance {
identity: &thing,
role: &hair_color
};
let another_thing = 43u64;
let other_appearance = Appearance {
identity: &another_thing,
role: &hair_color
};
println!("{}", appearance == other_appearance);
}
Run Code Online (Sandbox Code Playgroud)
当编译器到达时other_appearance,这给了我一个编译错误,告诉我another_thing没有足够长的时间.但是,如果我遗漏了other_appearance程序的创建编译并运行正常.为什么我收到此错误?
如何在以下代码中正确返回set函数中的引用?我确实理解set当块结束时变量超出范围,但它引用的数组是拥有的并且是活动的.一生的尝试'b是徒劳的.
#[derive(PartialEq, Eq, PartialOrd, Ord, Debug)]
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
}
#[derive(Clone, Copy, Debug)]
enum Dereference<'a> {
Dereference1ary {set: [&'a Appearance<'a>;1]},
Dereference2ary {set: [&'a Appearance<'a>;2]},
}
impl<'a, 'b> Dereference<'a> {
fn set(&self) -> &'b [&'a Appearance<'a>] {
match *self {
Dereference::Dereference1ary{set} => &set,
Dereference::Dereference2ary{set} => &set
}
}
}
fn main() {
let r = "hair_color";
let i1 = 42;
let i2 = 43;
let a1 = Appearance{identity: &i1, role: r}; …Run Code Online (Sandbox Code Playgroud) 为什么我不能按预期排序数组?
fn main() {
let mut a = [1,3,2];
let s = a.sort();
println!("{:?}", s);
}
Run Code Online (Sandbox Code Playgroud) 我需要存储十亿个"外观",我正在寻找最有效的方式来存储这些内存使用和性能.例如,在这些方面的差异是什么a1, a2, a3:
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
}
struct AnotherAppearance<'a>((&'a u64, &'a str));
fn main() {
let thing = 42;
let hair_color = "hair color";
let a1 = Appearance {identity: &thing, role: &hair_color};
let a2 = AnotherAppearance((&thing, &hair_color));
let a3 = (&thing, &hair_color);
}
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来处理这样的结构?另外,有没有办法获取详细信息,a1, a2, a3以便我可以看到它们在内存中如何代表我自己?
我知道如何使用像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);
}
Run Code Online (Sandbox Code Playgroud)
但是,set成员Dereference将是一个小规模的阵列.假设少于32,最常见的是1或2,很少3,并且几乎不是那么大.我可以创建32个结构和32个列表,但为了方便起见,我真的想以更聪明的方式做到这一点.即使我必须创建32个结构,至少有一个列表可以提供很多帮助.我需要它同时具有内存和性能效率.我如何在Rust中实现这一目标?
rust ×5