Rust `T.into()`起作用,但'From::From(T)`不起作用

Rust `T.into()`起作用,但'From::From(T)`不起作用,rust,Rust,在下面的代码段中,convert正在尝试将其输入转换为框: 使用时,为什么要求会从或更改为?当使用?操作符时,这会变得特别烦人: fn convert<T: Into<Box<Error>>>(input: T) -> Result<(), Box<Error>> { Err(input)? // Fails to compile } fn转换(输入:T)->结果{ 错误(输入)?//编译失败 } 在这些情况下,有没有

在下面的代码段中,
convert
正在尝试将其输入转换为

使用
时,为什么要求会从
更改为
?当使用
操作符时,这会变得特别烦人:

fn convert<T: Into<Box<Error>>>(input: T) -> Result<(), Box<Error>> {
    Err(input)? // Fails to compile
}
fn转换(输入:T)->结果{
错误(输入)?//编译失败
}

在这些情况下,有没有办法正确使用
运算符,或者我必须求助于手动
匹配

一种解决方案是根据
编写泛型:

fn convert<T>(input: T) -> Result<(), Box<Error>>
where
    Box<Error>: From<T>,
{
    Err(input)?
}
fn转换(输入:T)->结果
哪里
方框:从,
{
错误(输入)?
}
使用
时,为什么要求会从
更改为

即使某些东西将
实现为
,也不意味着它将
实现。例如,从以下实施者列表:


然而,反之亦然:如果
U
实现了
From
,那么
T
确实实现了
(因为整体实施)。这种关系的不对称可能会让人困惑。哦,我现在明白了,谢谢。我认为从一开始到另一段关系是双向的。很好,你也可以在右边放置带有泛型的约束!
fn convert<T>(input: T) -> Result<(), Box<Error>>
where
    Box<Error>: From<T>,
{
    Err(input)?
}
impl<T, U> Into<U> for T 
where
    U: From<T>, 

impl Into<Option<P<PathParameters>>> for AngleBracketedParameterData
impl Into<Vec<Annotatable>> for Annotatable
impl<T> Into<Vec<T>> for ThinVec<T>
impl<T> Into<Vec<T>> for P<[T]>
fn convert<T>(input: T) -> Box<Error>
where
    Box<Error>: From<T>,
{
    From::from(input) // Fails to compile
}