首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >**node.borrow()做了什么?

**node.borrow()做了什么?
EN

Stack Overflow用户
提问于 2020-02-20 01:58:18
回答 1查看 88关注 0票数 0
代码语言:javascript
复制
/// Traverses the network of nodes and returns the input node
fn get_input(node: Rc<RefCell<Box<Node>>>) -> Rc<RefCell<Box<Node>>> {
    match **node.borrow() { // here
        Node::Input { .. } => Rc::clone(&node),
        _ => { ... },
    }
}

我不明白为什么要建议这个编辑,为什么它会起作用。我认为最令人困惑的是有时会发生的隐含引用。

例如,.borrow()RefCell的一个方法,但我被允许直接在Rc上调用它。此外,这也可以工作:**(*node).borrow()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-20 20:28:49

let node = *(*((*node).borrow()))相当于:

代码语言:javascript
复制
let node = *node; // Rc implements Deref, node is now RefCell<Box<Node>>
let node =  node.borrow(); // a RefCell method, node is now Ref<<'empty>, Box<Node>>
let node = *node; // Ref implements Deref, node is now Box<Node>
let node = *node; // Box implements Deref, node is now Node

显式形式的*(*((*node).borrow()))等同于隐式的**node.borrow(),因为(操作符优先级和) Deref强制,因此Rc会自动解除引用,以便.borrow()的调用应用于它所指向的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60306527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档