我有以下定义:
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 中的借用/所有权概念,但我不知道如何解决这种情况:
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)