初识结构体

此篇假定读者已了解并使用过结构体。

使用struct声明并定义结构体


Rust结构体、枚举命名规范为:单词首字母大写,各单词间无空格。

1
2
3
4
5
struct Info {
id: u32,
x: f64,
y: f64,//最后一个`,`可加可不加
}

structfn一样,能在全局和任意代码块使用,同样的,struct也有作用域。

结构体使用方法:

1
2
3
4
5
6
let info = Info {
// 这里id,x,y的顺序可以随意安排
id: 0,
y: 0.,
x: 0.,
};

好了,接下来让我们尝试访问info的字段(field)id

1
println!("id={}", info.id);

cargo run,就可以看到输出:id=0

赋值简化

结构体的赋值往往比较冗长,因此Rust支持将赋值进行一定的简化。

  1. 赋值的字段名与实例名相同时,允许只写字段名:

    1
    2
    3
    4
    5
    6
    let id = 0;
    let info = Info {
    id,
    x: 0.,
    y: 0.,
    }

  2. 利用同类型实例的字段给实例赋值时,可使用更新语法简化赋值:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let info1 = Info {
    id: 0,
    x: 0.,
    y: 0.,
    }

    let info2 = Info {
    x: 0.,
    ..info1
    }

    info2除了id是指定赋值为1,其他的字段都使用info1同字段的值赋值。

元组结构体

使用普通结构体有时也会比较麻烦,毕竟每个字段都要命名,赋值也比较麻烦,折中的办法是使用元组结构体:

1
2
struct coordinate(f64, f64);
struct ec(f64, f64);

元组结构体的使用方法和元组差不多,使用.x访问第x个(从0开始)字段,赋值方式和元组也差不多:

1
let coor = coordinate(0., 0.);

但是注意一点,即使字段类型相同,各类型之间也不能互相赋值(除非强转)。

除了上述结构体外,还有一类特殊的结构体——零大小结构体,这类结构体没有任何的字段值。

至于作用:// TODO