gpt4 book ai didi

Rust 无法从 Any 扩展的特征对象向下转换引用

转载 作者:行者123 更新时间:2023-12-05 02:00:36 25 4
gpt4 key购买 nike

Here is the Rust Playground of the example code.

use std::any::Any;

pub trait MemorizedOutput: Any {
fn as_any(&self) -> &dyn Any;
}

impl<T: Any> MemorizedOutput for T {
fn as_any(&self) -> &dyn Any {
self
}
}

fn main() {
let a = Box::new(1i32) as Box<dyn MemorizedOutput>;
println!("{}", a.as_any().downcast_ref::<i32>().unwrap());
}

为什么上面的代码在unwrap()处出现panic。

最佳答案

Box<dyn MemorizedOutput>工具 Any ,所以它被MemorizedOutput的一揽子实现所涵盖.根据 https://doc.rust-lang.org/reference/expressions/method-call-expr.html , Rust 会更喜欢在 Box<dyn MemorizedOutput> 上实现的方法在它之前是取消引用的类型 dyn MemorizedOutput .所以a.as_any()实际上是 <Box<dyn MemorizedOutput> as MemorizedOutput>::as_any(&a) , 显然不能向下转换为 i32 .

关于Rust 无法从 Any 扩展的特征对象向下转换引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67206692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com