Rust 直接调用函数时可变引用的寿命足够长,但通过中间函数调用时可变引用的寿命不够长
对于以下防锈代码:Rust 直接调用函数时可变引用的寿命足够长,但通过中间函数调用时可变引用的寿命不够长,rust,lifetime-scoping,Rust,Lifetime Scoping,对于以下防锈代码: fn facing_of_mut<'a>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut Direction> { component_of_mut(&mut domain, entity) } …我可以在单元测试中直接调用它,在编译过程中不会出现生命周期错误。只有当facing of mut调用它时,我才会收到错误。您正在引用域。域是参数的局部
fn facing_of_mut<'a>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut Direction> {
component_of_mut(&mut domain, entity)
}
…我可以在单元测试中直接调用它,在编译过程中不会出现生命周期错误。只有当facing of mut调用它时,我才会收到错误。您正在引用域。域是参数的局部变量,并且已经是引用。域仅在函数调用期间持续,因此对该值的引用可以存在多长时间 若要修复此问题,请不要尝试引用引用:
type Domain = String;
type Entity = String;
type Direction = String;
pub fn component_of_mut<'a, C>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut C>
where C: 'static
{
unimplemented!()
}
fn facing_of_mut<'a>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut Direction> {
component_of_mut(domain, entity)
}
fn main() {}
type Domain = String;
type Entity = String;
type Direction = String;
pub fn component_of_mut<'a, C>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut C>
where C: 'static
{
unimplemented!()
}
fn facing_of_mut<'a>(domain: &'a mut Domain, entity: Entity) -> Option<&'a mut Direction> {
component_of_mut(domain, entity)
}
fn main() {}