首页 > 解决方案 > 如何返回 RefCell 值的参考

问题描述

我正在实施双向链表来学习生锈。
要获得双向链表值,
我想返回对值的引用。

如果我只是返回值,我可以。
但是如果我这样做,列表值必须实现Clone特征......
我应该怎么做?

这是我的示例代码。

use std::rc::Rc;
use std::cell::RefCell;

struct Person{
    age: Rc<RefCell<i32>>,
}

impl Person {
    fn get_string<'a>(&'a self) -> &'a i32{
        //  acutually do while loop until reach designated index
        let person_age = *self.age.borrow_mut();
        //  I want to return reference to i32
        &person_age
    }
}
fn main() {
    let age = Rc::new(RefCell::new(10));
    let person = Person{age:Rc::clone(&age)};
    println!("person name is {}", person.get_string());
}

标签: rust

解决方案


你应该RefRefCell 一样返回

    fn get_string(&self) -> Ref<i32>{
        return self.age.borrow_mut()
    }

除了它实现了 Drop 之外,它的行为应该或多或少类似于引用。它在 RefCell 中使用而不是引用,因为它确实可以维护 RefCell 不变量,因此当您使用 RefCell 时,您应该使用它。


推荐阅读