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)