我定义了一个递归函数,该递归函数可从另一个函数创建树状结构。在函数内部创建的值无法取值。
我尝试了不同的方法来获取函数的所有权,返回值本身,将向量作为参数来存储值。
#[derive(Clone, Copy)]
pub enum Concept<'a> {
Variable,
Base(&'a str),
ForAll(&'a str, &'a Concept<'a>),
}
pub fn normal_form_reduction<'a>(
con: &Concept<'a>,
container: &mut Vec<Concept<'a>>,
) -> Concept<'a> {
match *con {
// bases cases without recurrence
Concept::Variable => Concept::Variable,
Concept::Base(s) => Concept::Base(&*s),
//...
//first recursive call
Concept::ForAll(s, c) => {
let nc = normal_form_reduction(c, container);
(*container).push(nc);
Concept::ForAll(s, &nc)
}
}
}
预期编译。 获取:
error[E0515]: cannot return value referencing local variable `nc`
--> src/lib.rs:22:13
|
22 | Concept::ForAll(s, &nc)
| ^^^^^^^^^^^^^^^^^^^---^
| | |
| | `nc` is borrowed here
| returns a value referencing data owned by the current function
错误“ E0515”不能解释我的错误。