zoukankan      html  css  js  c++  java
  • rust: 默认初始化,函数重载

    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);
    }
    
    
  • 相关阅读:
    php读取大文件如日志文件
    大型站点高并发架构技术
    Nginx配置文件nginx.conf详细说明文档
    关于PHP高并发抢购系统设计
    Mysql常用的锁机制
    Sping基础
    Reliable Master持续集成环境搭建Centos
    Win7 macaca自动化环境搭建 PC篇
    安卓appium无线调试
    Selenium PageFactory使用
  • 原文地址:https://www.cnblogs.com/cutepig/p/12685126.html
Copyright © 2011-2022 走看看