你错过了一个非常简单但容易错过的事实:如果你有
From<T> for U
您自动拥有的实现
Into<U> for T
实施,
但事实并非如此
。因此,如果通过泛型您需要
T: Into<B>
(这是正确的做法,因为它比
B: From<T>
),您需要使用
.into()
而不是
B::from()
:
impl B {
pub fn from_many<T: Into<B> + Clone>(v: Vec<T>) -> Self {
B { x: v.iter().map(|e| e.clone().into().x).collect::<Vec<String>>().join(" ") }
}
}
另一件与你无关的事情是,由于你拥有
Vec<T>
你可以使用
into_iter()
然后你就不需要了
.clone()
:
impl B {
pub fn from_many<T: Into<B>>(v: Vec<T>) -> Self {
B { x: v.into_iter().map(|e| e.into().x).collect::<Vec<String>>().join(" ") }
}
}