rust用泛型可以根据后续的类型提示自动选择返回值类型
#[derive(Debug)]
struct Foo(i32);
#[derive(Debug)]
struct FooBar(i32,i32);
trait New{
fn new(i:i32)->Self;
}
impl New for Foo{
fn new(i:i32)->Foo{
Foo(i)
}
}
impl New for FooBar{
fn new(i:i32)->FooBar{
FooBar(i,i+10)
}
}
struct Bar;
impl Bar{
fn bar<T:New>(&self,i:i32)->T{
T::new(i)
}
}
fn bar2<T:New>(i:i32)->T{
T::new(i)
}
fn main() {
let b = Bar;
//b.bar(1)返回的类型根据f1的类型提示自动选择
let f1:Foo = b.bar(1);
println!("{:?}",f1);
let fb:FooBar = b.bar(2);
println!("{:?}",fb);
let f2:Foo = bar2(10);
println!("{:?}",f2);
let fb2:FooBar = b.bar(20);
println!("{:?}",fb2);
}
Play上可以运行:http://is.gd/0MhxhU
运行结果:
Foo(1)
FooBar(2, 12)
Foo(10)
FooBar(20, 30)
本文通过实例演示了如何在Rust中使用泛型来自动选择返回值类型。具体包括定义带有泛型的trait `New` 和实现该trait的结构体 `Foo` 与 `FooBar`,并展示了如何在函数 `bar` 中利用这些定义来根据类型提示选择返回不同的结构体实例。
1368

被折叠的 条评论
为什么被折叠?



