• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

rust: 默认初始化,函数重载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

rust: 默认初始化,函数重载

如下

pub struct Foo {
    bar: String,
    baz: i32,
    quux: bool,
}

impl Default for Foo {
    fn default() -> Self {
        Foo {
            bar: "".to_string(),
            baz: 0,
            quux: false,
        }
    }
}

impl Foo {
    pub fn new() -> Self {
        Foo {
            ..Default::default()
        }
    }

    fn new_str(x: String) -> Self {
        Foo {
            bar: x,
            ..Default::default()
        }
    }
    fn new_i32(x: i32) -> Self {
        Foo {
            baz: x,
            ..Default::default()
        }
    }
    fn new_bool(x: bool) -> Self {
        Foo {
            quux: x,
            ..Default::default()
        }
    }
}

#[test]
fn name() {
    let a = Foo::new_i32(1);
}

函数重载

rust本身不支持函数重载,但是可以用泛型trait实现类似于重载的效果

如下,

pub trait With<T> {
    fn with(value: T) -> Self;
}

struct Foo {
    bar: String,
    baz: i32,
    quux: bool,
}

impl Default for Foo {
    fn default() -> Self {
        Foo {
            bar: "".to_string(),
            baz: 0,
            quux: false,
        }
    }
}

impl Foo {
    fn new() -> Self {
        Foo {
            ..Default::default()
        }
    }
}

impl With<String> for Foo {
    fn with(x: String) -> Self {
        Foo {
            bar: x,
            ..Default::default()
        }
    }
}

impl With<i32> for Foo {
    fn with(x: i32) -> Self {
        Foo {
            baz: x,
            ..Default::default()
        }
    }
}

impl With<bool> for Foo {
    fn with(x: bool) -> Self {
        Foo {
            quux: x,
            ..Default::default()
        }
    }
}

#[test]
fn name() {
    let a = Foo::with(1);
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap