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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM