所以我有一些类型
#[derive(Debug)]
pub struct Foo {
pub bar: u32,
pub baz: u32,
}
impl From<(u32, u32)> for Foo {
fn from(foo: (u32, u32)) -> Self {
Self {
bar: foo.0,
baz: foo.1,
}
}
}
我的目标是创建一个函数,该函数将接收实现From<(u32, u32)>
的内容,并将其进一步转发给期望Foo
或(u32, u32)
的函数。
pub fn print(val: impl From<(u32, u32)>) {
print_foo(val.into());
print_tuple(val.into())
}
pub fn print_tuple(t: (u32, u32)) {
println!("Tuple: {:?}", t);
}
pub fn print_foo(foo: Foo) {
println!("Foo: {:?}", foo);
}
这将导致一个错误:
the trait `From<impl From<(u32, u32)>>` is not implemented for `Foo`
the trait `From<impl From<(u32, u32)>>` is not implemented for `(u32, u32)`
据我所知,由于into()
调用,这将impl From<_>
Package 为From
。
我的问题是如何实现这样一个目标,即拥有一个可以接收元组或结构的函数,并将其进一步传递给专门的函数。
1条答案
按热度按时间7lrncoxx1#
impl From<T>
是一个非常无用的接收值的类型,它可以是任何东西,但From
让我们做的只是创建相同类型的 * 新 * 项,而不是以任何有意义的方式使用我们拥有的值。你想要的是使用Into
实现:请注意,由于您希望传递相同的值两次,因此必须同时添加
Copy
或Clone
绑定,或者需要for<'a> &'a T: Into<Foo>
。