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

【Rust】结构体 struct

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

定义结构体

#[derive(Debug)]
struct Rectangle {
    name: String,
    width: u32,
    height: u32,
}

 

定义结构体方法

impl Rectangle {
    // 方法
    fn area(&self) -> u32 {
        self.width * self.height
    }
    // 更多参数的方法
    fn hold(&self, other: &Rectangle) -> bool {
        self.width > other.width && self.height > other.height
    }
    // 关联函数
    fn square(size: u32) -> Rectangle {
        Rectangle { name: String::from(""), width: size, height: size }
    }
}

impl 是 implementation 的缩写。

Self 类型是 impl 块的类型的别名。方法的第一个参数必须有一个名为 self 的 Self 类型的参数。&self 实际上是 self: &Self 的缩写,表示方法借用了 Self 实例。

如果想要在方法中改变调用方法的实例,需要将第一个参数改为 &mut self

更过参数的方法,参数必须放在第二个

关联函数(associated functions),定义不以 self 为第一参数的关联函数(因此不是方法),因为它们并不作用于一个结构体的实例。

 

结构体使用

let rectangle = Rectangle { name: String::from("R"), width: 10, height: 20 };
println!("{:?}", rectangle);
println!("The area of the rectangle {} is {}", rectangle.name, rectangle.area());

 

字段初始化简写语法(field init shorthand)

let rectangle1 = build_rectangle(String::from("R1"), 10, 20);
println!("{:?}", rectangle1);
println!("The area of the rectangle {} is {}", rectangle1.name, rectangle1.area());

fn build_rectangle(name: String, width: u32, h: u32) -> Rectangle {
    Rectangle {name,width,height:h}
}

参数与结构体字段同名时,仅写一个名称就可以,不用写成 key: value 形式。

 

结构体更新语法(struct update syntax)

let rectangle2 = Rectangle {name: String::from("R2"),..rectangle1};
println!("{:?}", rectangle2);
println!("The area of the rectangle {} is {}", rectangle2.name, rectangle2.area());

.. 语法指定了剩余未显式设置值的字段应与给定实例对应字段相同的值

 

元组结构体(tuple structs)

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

使用没有命名字段的元组结构体来创建不同的类型,元组结构体有着结构体名称提供的含义,但没有具体的字段名,只有字段的类型。

 

类单元结构体(unit-like structs)

struct AlwaysEqual;
let subject = AlwaysEqual;

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


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
matlab快速入门(14):获取文档帮助发布时间:2022-07-18
下一篇:
Matlab中如何去除白边保存图片发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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