无法在Rust中进入supertrait

时间:2017-12-26 11:48:40

标签: rust traits

我试图在Rust中创建一个程序,我有一个函数返回一个特征对象引用(#!/bin/bash for i in $( pip freeze ); do sudo pip uninstall -y $i done ),其中&TT作为超级对象( 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`

1 个答案:

答案 0 :(得分:1)

虽然目前Rust本身并不支持将特征对象向上转换为超级对象,但通常你可以通过暴露特征方法来执行它,以执行你关心的具体upcast。

在您的情况下,可能包含logouploader = $("#logouploader").prop('files')[0]; 方法,如下所示。

as_any_ref