小编Cor*_*ker的帖子

获取子类型上的 Rc<RefCell<dyn T>>>

我有以下定义:

trait A {
    fn f(&self);
}

trait B: A {
// ...
}
Run Code Online (Sandbox Code Playgroud)

我想实现这样的功能:

fn convert(v: Rc<RefCell<dyn B>>) -> Rc<RefCell<dyn A>> {
}
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来返回共享同一对象的值,这意味着使用这些声明:

let x: Rc<RefCell<dyn B>> /* = ... */;
let y = convert(Rc::clone(&x));
Run Code Online (Sandbox Code Playgroud)

调用x.f()y.f()应用调用位于同一对象上。

我如何实现该函数convert或如何更改类型定义以具有该行为和该类型的转换(到子对象的转换)。

rust subtyping trait-objects

5
推荐指数
1
解决办法
1122
查看次数

如何在借用不可变值的匹配中进行变异?

我可以理解 Rust 中的借用/所有权概念,但我不知道如何解决这种情况:

use std::collections::{HashMap, HashSet};

struct Val {
    t: HashMap<u16, u16>,
    l: HashSet<u16>,
}

impl Val {
    fn new() -> Val {
        Val {
            t: HashMap::new(),
            l: HashSet::new(),
        }
    }

    fn set(&mut self, k: u16, v: u16) {
        self.t.insert(k, v);
        self.l.insert(v);
    }

    fn remove(&mut self, v: &u16) -> bool {
        self.l.remove(v)
    }

    fn do_work(&mut self, v: u16) -> bool {
        match self.t.get(&v) {
            None => false,
            Some(r) => self.remove(r),
        }
    }
}

fn main() {
    let mut v = …
Run Code Online (Sandbox Code Playgroud)

ownership rust borrowing

1
推荐指数
1
解决办法
916
查看次数

标签 统计

rust ×2

borrowing ×1

ownership ×1

subtyping ×1

trait-objects ×1