用泛型实现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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值