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
}