Rust 我如何返回对某个拥有且活着的对象的引用?
如何在下面的代码中正确返回set函数中的引用?我确实理解,当块结束时,变量Rust 我如何返回对某个拥有且活着的对象的引用?,rust,Rust,如何在下面的代码中正确返回set函数中的引用?我确实理解,当块结束时,变量set超出范围,但是它引用的数组是有主的并且是活动的。使用生存期'b的尝试是徒劳的 #[derive(PartialEq, Eq, PartialOrd, Ord, Debug)] struct Appearance<'a> { identity: &'a u64, role: &'a str } #[derive(Clone, Copy, Debug)] e
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};
let a2 = Appearance{identity: &i2, role: r};
let d1 = Dereference::Dereference1ary{set: [&a1]};
let d2 = Dereference::Dereference2ary{set: [&a1, &a2]};
let list: Vec<Dereference> = vec!(d1, d2);
println!("{:?}", list);
println!("{:?}", d1.set());
}
#[派生(PartialEq、Eq、PartialOrd、Ord、Debug)]
结构外观{
解引用{set:[&'a外观{
fn set(&self)->&'b[&'a外观问题是Dereference1ary{set}
复制set
并引用副本。您需要的是使用Dereference1ary{ref set}
直接引用set
字段
impl<'a> Dereference<'a> {
fn set(&self) -> &[&'a Appearance<'a>] {
match *self {
Dereference::Dereference1ary{ref set} => set,
Dereference::Dereference2ary{ref set} => set,
}
}
}
因为你想借用self
对象的一部分,所以生命周期需要匹配。谢谢你,ref关键字正是我一直在寻找的并且还没有学会的:)
fn set<'b>(&'b self) -> &'b [&'a Appearance<'a>]