Vector 从向量返回元素时出现错误E0495
我一直在尝试用Rust创建一个简单的解释器。下面是一段代码片段Vector 从向量返回元素时出现错误E0495,vector,rust,lifetime,Vector,Rust,Lifetime,我一直在尝试用Rust创建一个简单的解释器。下面是一段代码片段 use std::vec::Vec; use std::option::Option; use std::borrow::Borrow; trait Data {} trait Instruction { fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data>; } struct Get {
use std::vec::Vec;
use std::option::Option;
use std::borrow::Borrow;
trait Data {}
trait Instruction {
fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data>;
}
struct Get {
stack_index: usize,
}
impl Instruction for Get {
fn run(&self, stack: &mut Vec<Box<Data>>) -> Option<&Data> {
Some(stack[self.stack_index].borrow())
}
}
fn main() {}
我缺少什么?如中所述,stack[self.stack\u index]
正在按值返回切片中的值。然后尝试返回对局部变量的引用,如中所述,这是不允许的
实际上,您需要执行一些(&*stack[self.stack\u index])
,这将取消对框的引用,以获取数据,然后重新引用它。因为您的实现不符合的规则,所以需要向trait方法和实现添加显式生存期:
fn run<'a>(&self, stack: &'a mut Vec<Box<Data>>) -> Option<&'a Data>
谢谢你的回答!但是如果我理解正确的话,@abologic你需要;我已经在回答中阐明了这一点。哦,是的,为这个愚蠢的错误感到抱歉,谢谢!
stack.get(self.stack_index).map(Box::as_ref)