微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我实现 MyTrait 的具体类型不是有效的“dyn MyTrait”特征对象?

如何解决为什么我实现 MyTrait 的具体类型不是有效的“dyn MyTrait”特征对象?

所以我将特征对象存储在 Rc::Weak 引用后面,作为 Rust 中观察者模式实现的一部分,我遇到了一个问题,我尝试在 Vec 中存储 Weak>,其中 T 是实现 MyTrait 的类型的具体实例。这是我的最小可重现示例:

export default ({ SSRtasks }) => {
  const [ tasks,setTasks ] = useState(SSRtasks)
  const { data: freshTasks,mutate } = useSwr('/api/tasks')
  useEffect(() => freshTasks && setTasks(freshTasks),[ freshTasks ])

  return (
   <ul>{tasks.map(task => <li>{task}</li>)}</ul>
  )
}

export const getServerSideProps = async ({ req,res }) => {
  const SSRtasks = Task.find({ owner: id })
  return { props: { SSRtasks } }
}

这是错误

use std::rc::{Rc,Weak};

trait MyTrait {}
struct Concrete {}
impl MyTrait for Concrete {}

struct Bucket {
    vec: Vec<Weak<dyn MyTrait>>,}

impl Bucket {
    pub fn push(&mut self,to_push: Weak<dyn MyTrait>) {
        self.vec.push(to_push);
    }
}

fn main() {
    let bucket = Bucket { vec: Vec::new(),};
    let concrete = Concrete {};
    bucket.push(Rc::downgrade(&Rc::new(concrete)));
}

我不明白的是,实现 MyTrait 的 Concrete 如何不被接受为“dyn MyTrait”特征对象。具体的 MyTrait,所以......这里发生了什么?

目前在稳定版上运行 rustc 1.49.0,但这个错误也发生在操场上。

感谢您的时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。