qq_21949241 2023-01-17 17:39 采纳率: 50%
浏览 17
已结题

rust学习中遇到的问题

#[derive(Debug, Ord, PartialOrd, Eq, PartialEq)]
pub struct TreeNode {
    pub val: i32,
    pub left: Option<Rc<RefCell<TreeNode>>>,
    pub right: Option<Rc<RefCell<TreeNode>>>,
}

impl TreeNode {
    pub fn new(val: i32) -> TreeNode {
        TreeNode {
            val,
            left: None,
            right: None,
        }
    }
}

pub fn traverse_post(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
    let mut vec = vec![];
    dfs(root, &mut vec);
    return vec;
    fn dfs(node: Option<Rc<RefCell<TreeNode>>>, list: &mut Vec<i32>) {
       if  let Some(x)=node {
           dfs(x.borrow().left.clone(), list);
           list.push(x.borrow().val);
           dfs(x.borrow().right.clone(),list);
       }
    }
}

这段代码在dfs中,x.borrow()那里一直报错,让我指定type annotation ,有人知道这该怎么解决吗,谢谢~

  • 写回答

3条回答 默认 最新

  • lidiyscrp 2023-01-17 19:47
    关注

    这可能是因为该行代码中没有指定变量x的类型,这样编译器无法判断它可以调用哪些方法。你可以尝试指定一下变量类型,比如let x: Option<Rc<RefCell>> = node; 或者let x: Rc<RefCell> = node.unwrap();,看编译器是否接受。
    如果上述方法不行,你也可以尝试对x.borrow()调用as_ref()函数,用来将RefCell类型的引用转换为Ref类型的引用,然后再调用其中的方法来访问TreeNode的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 流比 2023-01-17 19:57
    关注

    这个问题是由于 x.borrow() 方法返回的是一个 Ref 类型的借用,而 Rust 不能确定这个借用是什么类型。

    在这种情况下,你可以使用类型指示符 as 明确地告诉编译器这个借用是 TreeNode 类型。

    let x = x.borrow() as &TreeNode;
    
    
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-01-17 21:12
    关注
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 创建了问题 1月17日

悬赏问题

  • ¥15 最小生成树问题 Prim算法和Kruskal算法
  • ¥25 医院住院病人呼叫器设计
  • ¥15 不想和现在的团队合作了,怎么避免他们对程序动手脚
  • ¥30 c++类和数组实验代码
  • ¥20 C语言字符串不区分大小写字典排序相关问题
  • ¥15 关于#python#的问题:我希望通过逆向技术爬取1688搜索页下滑加载的数据
  • ¥15 关于Linux的终端里,模拟实现一个带口令保护的屏保程序遇到的输入输出的问题!(语言-c语言)
  • ¥30 请问,这个嵌入式Linux系统怎么分析,crc检验区域在哪
  • ¥15 二分类改为多分类问题
  • ¥15 Unity微信小游戏上调用ReadPixels()方法报错