gpt4 book ai didi

rust - 无法返回对临时值的引用

转载 作者:行者123 更新时间:2023-12-03 11:24:46 27 4
gpt4 key购买 nike

我正在尝试学习 Rust,同时我想尝试将 struct 对象转换为字节数组,但我在这样做时遇到了问题。
所以我有这个:

struct Node<'a> {
id: u8,
name: &'a str,
data: &'a str,
}
impl<'a> Node<'a> {
fn new() -> Node<'a> {
return Node {
id: 1,
name: "superName",
data: "some random desc2",
};
}

fn to_buffer(&mut self) -> &'a [u8] {
let mut size = mem::size_of::<Node>();
size = size + self.name.len() * mem::size_of::<char>();
size = size + self.data.len() * mem::size_of::<char>();
println!("size {}", size);
return &[self.id];
}
}
但我只是收到错误“无法返回对临时值的引用”
而且我不是 100% 确定我理解错误信息开始...是不是因为 self.id只限于此函数,并且在返回时会从堆栈中删除?
有没有办法解决这个问题?

最佳答案

任何以 & 开头的内容在 Rust 中是对值的引用,而不是值本身。一个 &[u8]是对需要存在于其他地方的值的引用。
因为您在函数内创建了它作为引用的值,所以当函数返回时,引用指向的值不再存在。 ( id 仍然存在,但包含 id 的切片不存在)。
相反,您可以返回一个拥有的值,而不是一个引用:

   fn to_buffer(&mut self) -> Vec<u8> {
let mut size = mem::size_of::<Node>();
size = size + self.name.len() * mem::size_of::<char>();
size = size + self.data.len() * mem::size_of::<char>();
println!("size {}", size);
return vec![self.id];
}
然后调用者可以引用他们是否需要。

关于rust - 无法返回对临时值的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63861458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com