Rust 结构体

作者: kaiv2 | 来源:发表于2020-03-21 21:41 被阅读0次

    使用结构体组织相关的数据

    定义并实例化结构体

    struct User {
        username: String,
        email: String,
        sign_in_count: u64,
        active: bool,
    }
    
    fn main() {
        let mut user1 = User {
            usernaem: String::from("someusername"),
            emain: String::from("someone@example.com"),
            active: true,
            sign_in_count: 1,
        };
        user1.email = String::from("one&example.com");
    }
    

    定义结构体需要使用struct关键字并为整个结构体提供一个名字。接着在大括号中,定义每一部分数据的名字和类型,我们成为字段

    创建结构体实例,通过为每个字段指定具体值来创建这个结构体的 实例

    我们可以在函数的最后一个表达是中构造一个结构体的新实例,来隐式地返回这个实例。

    fn build_user(email: String, username: String) -> User {
        User {
            email: email,
            username: username,
            active: true,
            sign_in_count: 1,
        }
    }
    

    为函数参数起与结构体自相同的名字是可以理解的,但是不得不重复emailusername字段名与变量名有些啰嗦。

    fn build_user(emain: String, username: String) -> User {
        User{
            email,
            username,
            active: true,
            sign_in_count: 1,
        }
    }
    

    使用结构体更新语法重其他实例创建实例

    let user1 = User {
        email: String::from("some@example.com"),
        username: String::from("zhang"),
        active: true,
        sign_in_count: 1,
    };
    let user2 = User {
        email: String::from("abc@example.com"),
        username: String:from("li"),
        active: user1.active,
        sign_in_count: user1.sign_in_count,
    };
    

    使用结构体更新语法,我们可以通过更少的代码来达到相同的效果。

    let user2 = User {
        emain: String:from("abc@example.com"),
        username: String::from("li"),
        ..user1
    };
    

    使用没有名字字段的元组结构体来创建不同的类型

    也可以定义与元组类似的结构体,称为元组结构体

    struct Color(i32, i32, i32);
    struct Point(i32, i32, i32);
    
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
    

    没有任何字段的类单元结构体

    我们也可以定义一个没有任何字段的结构体!它们被称为单元结构体因为他们类似于(),即unit类型。

    使用结构体的示例程序

    #[derive(Debug)]
    struct Rectangle {
        width: u32,
        height: u32,
    }
    fn main() {
        let rect1 = Rectangle {width: 12, height: 24};
        
        println!("{}", area(&rect1));
    }
    
    fn area(rec: &Rectangle) {
        rectangle.width * rectangle.height
    }
    

    相关文章

      网友评论

        本文标题:Rust 结构体

        本文链接:https://www.haomeiwen.com/subject/xfjuyhtx.html