我试图在Rust中创建一个程序,我有一个函数返回一个特征对象引用(#!/bin/bash
for i in $( pip freeze ); do
sudo pip uninstall -y $i
done
),其中&T
有T
作为超级对象( T定义为std::any::Any
)。由于实现trait T: std::any::Any
的每个值也必须实现T
,我希望能够做到:
std::any::Any
但这会产生编译错误,说fn give_T_ref() -> &'static T {
...
}
let y: &std::any::Any = give_T_ref();
。
这是编译器中的错误/问题,还是我遗漏了什么?目前有什么方法可以解决这个问题吗?
以下是我的问题(link to play.rust-lang.org)的最小可运行示例:
expected trait `std::any::Any`, found trait `T`
答案 0 :(得分:1)
虽然目前Rust本身并不支持将特征对象向上转换为超级对象,但通常你可以通过暴露特征方法来执行它,以执行你关心的具体upcast。
在您的情况下,可能包含logouploader = $("#logouploader").prop('files')[0];
方法,如下所示。
as_any_ref