赞
踩
目录
结构体是一种自定义的数据类型,它允许我们命名多个相关的值并将他们组成一个有机的结合体。学过C语言的小伙伴们应该对结构体很熟悉了吧!当然,要是没学过那也不要紧;学过面向对象的语言也是可以的;在面向对象的语言中;我们可以把“对象”的属性看做成结构体;这样就容易理解啦!
rust中的结构体语法很简单,定义一个struct,只需要指明结构体名称,结构体成员的类型即可,每个成员用逗号隔开;示例如下:
- struct User{
- username:String,
- email:String,
- sign_in_count:u64,
- active: bool,
- }
如上图所示,结构体名称为User,结构体成员有四个;前两个为字符串类型,第三个为整形,第四个为布尔类型;这里要强调一点:就是结构体成员变量的最后一个结尾最好是要带上逗号哦!不带上呢,好像也不会报错呢,就像下面这样:
我们使用cargo build命令进行编译,使用cargo run命令进行运行程序,执行结果如下图所示:
执行结果完全正确!这里呢,给大家推荐一个rust一键编译运行的插件:Code Debugger,安装上这个插件呢,你就不需要在输入命令来编译和运行啦!这个插件在vscode扩展中,长这样:
好啦!rust结构体的创建我们就讲到这里啦!
rust的结构体成员的调用方式与c是一样的,用"点"运算法来调用成员变量;下面来看看具体在示例中是如何调用的呢,我们还是用上面那个结构体做实验;代码部分如下所示:
- fn main() {
-
- let user1 = User{
- email:String::from("2571393392@qq.com"),
- username:String::from("junpc"),
- active: true,
- sign_in_count:1,
- };
-
- println!(" {} ,{}, {}, {}", user1.email, user1.username, user1.active, user1.sign_in_count);
- }
从上面的代码中我们看到了结构体User声明了一个user1的结构体变量,并且为user1结构体付了初始值;后面就进行了一个简单的打印输入语句,分别输出user1结构体的成员变量值,调用的方式呢,就是使用“点”运算符啦!执行结果和上面的一样!
首先如果说你定义的结构体是不可变的,那么你是不能够修改这个结构体变量的成员;但是你声明的是个可变的结构体变量,那么你就可以轻松的修改这个结构体变量的任意成员啦!谨记:rust结构体变量一旦被声明为可变的,那么所有的成员变量全都是可变的哦,千万要记住这点哈!来个小例子,大家往下看:
- fn main() {
-
- let mut user1 = User{
- email:String::from("2571393392@qq.com"),
- username:String::from("junpc"),
- active: true,
- sign_in_count:1,
- };
-
- println!(" {} ,{}, {}, {}", user1.email, user1.username, user1.active, user1.sign_in_count);
- user1.sign_in_count = 32;
- println!(" {} ,{}, {}, {}", user1.email, user1.username, user1.active, user1.sign_in_count);
- }
在上面的示例中,我们修改了user1为可变的类型(加了关键字mut)中sign_in_count的值,分别对改变前的值以及改变后的值进行打印输出,执行结果如下图所示:
学过函数的小伙伴都是知道rust函数最后的返回值是一个表达式,在这里我们可以在一个函数中最后一个表达式中构造出一个结构体实体,作为函数的返回值,我们还是使用User这个结构体作为示例,示例代码如下所示:
- fn main() {
-
- let mut user1 = User{
- email:String::from("2571393392@qq.com"),
- username:String::from("junpc"),
- active: true,
- sign_in_count:1,
- };
-
- println!(" {} ,{}, {}, {}", user1.email, user1.username, user1.active, user1.sign_in_count);
-
- user1 = create_user(String::from("132222@163.com"), false);
-
- println!(" {} ,{}, {}, {}", user1.email, user1.username, user1.active, user1.sign_in_count);
- }
-
- fn create_user(email: String, active: bool) -> User {
-
- User {
- username: String::from("lisi"),
- email: email,
- sign_in_count: 10,
- active: active,
- }
- }
上面的代码应该比较容易看懂,这里我们需要在主函数中定义一个可变的User变量用来接收create_user函数的返回值,最后我们把赋值前与赋值后的user1的成员变量值打印出来,实际的执行结果如下图所示:
看过上面代码的小伙伴有没有注意到一个问题,就是在create_user函数中我们的形参与结构体User中的成员变量email、active完全一致;这样咱们的程序看起来就易懂,简明;但是在将形参赋值给我们构造的User结构体时,我们是需要重复的写出来active,email的;rust给我们提供了一个简明的写法:当结构体成员变量与函数形参名一致时:可以用下面这种写法:
这样看起来是不是很舒服啊!赶快用起来吧!
今天学习了rust的struct部分内容,总体感觉还是不错的!今天打卡下班!明天继续学习rust的struct部分!老样子,菜哥是一位又菜又爱玩的博主,文中有讲的错误的地方,还请大家在评论区留言!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。