用泛型实现rust返回类型自动推导

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,返回类型自动推导)