rust结构体
//Rust 并不允许只将某个字段标记为可变
struct User {
email: String,
name:String,
age:i32,
sex:String,
active:bool,
}
fn main() {
let mut user1=User{
email: String::from("1@qq.com"),
name:String::from("hehe"),
age:23,
sex: String::from("man"),
active:true,
};
user1.name =String::from("zhangsan");
let user2 = User {
email: String::from("3@qq.com"),
name: String::from("lisa"),
..user1 //其余值来自 user1 变量中实例的字段,简写形式
};
let user3=set_user_value(String::from("2@qq.com"),String::from("xiaohong"));
}
fn set_user_value(email:String,name:String)->User {
//参数名和结构体的名字相同时,可简写比如email:email 可以直接写email,
User {
email,
name,
age:23,
sex:String::from("man"),
active:true,
}
}
User 结构体的定义中,我们使用了自身拥有所有权的 String 类型而不是 &str 字符串 slice 类型。
这是一个有意而为之的选择,因为我们想要这个结构体拥有它所有的数据,为此只要整个结构体是有效的话其数据也是有效的。
可以使结构体存储被其他对象拥有的数据的引用,不过这么做的话需要用上 生命周期(lifetimes)
一个示例
//使用结构体的好处组织性
//增加注解来派生 Debug trait,并使用调试格式打印 Rectangle 实例
#[derive(Debug)]
struct Rectangle{
width:u32,
height:u32,
}
//impl 块将函数定义在上下文中
impl Rectangle{
//使用 &self 来替代 rectangle: &Rectangle,
//因为该方法位于 impl Rectangle 上下文中
//所以 Rust 知道 self 的类型是 Rectangle
//加&表示不获取所有权,因为我们使用值就可以了
//如果想修改里面的值就需要在self前加&mut,然后将
//let rect1 改为let mut rect1
fn area(&mut self) ->u32{
self.width = 23;
self.width*self.height
}
}
fn main() {
let mut rect1 = Rectangle{width:30,height:50};
// {:#?}是比 {:?}风格优美的打印格式
//println!("rec1 is {:#?}",rect1);
// println!(
// "The area of the rectangle is {} square pixels.",
// area(&rect1)
// );
println!(
"The area of the rectangle is {} square pixels.",
rect1.area()
)
}
//函数定义
// fn area(rectangle: &Rectangle) ->u32{
// rectangle.width*rectangle.height
// }
//方法定义,第一参数必须是self。
rust结构体的更多相关文章
- C语言——结构体
struct 是一种把一些数据项组合在一起的数据结构.在Go,Rust这些新语言中都保留了结构体 struct 的概念,这是C的精华. 定义匿名结构体 例:学生信息定义为一个结构体,信息内容包括学生的 ...
- Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- C++_系列自学课程_第_12_课_结构体
#include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- Java 之 ServletContext 对象
ServletContext 对象 一.概念 ServletContext对象:代表整个 web 应用,可以和程序的容器(服务器)来通信. 二.获取 1.通过request 获取 方法: reques ...
- 使用sudo进行Linux权限升级技巧
0x00 前言 在我们之前的文章中,我们讨论了如何使用SUID二进制文件和/etc/passwd 文件的Linux权限提升技巧,今天我们发布了另一种“使用Sudoers文件进行Linux权限提示技巧” ...
- Xcode调试打印方法
1 NSLog 在调试的过程中,最常用的查看变量值的方法是NSLog 整数 int a = 1; NSLog("%d", a); 浮点数 float b = 1.11; NSLog ...
- npm 更换阿里淘宝源
执行命令 npm config set registry https://registry.npm.taobao.org/ 查看是否已经更换成功 npm config get registry
- iview input绑定enter事件
在使用iview Input组件是,需要enter粗发相关的请求事件,但是在Input组件内不起效果: <Input placeholder="请输入查询信息" style= ...
- day 07 作业
猜年龄游戏 ''' 给定年龄,用户可以猜三次年龄 年龄猜对,让用户选择两次奖励 用户选择两次奖励后可以退出 ''' age_count = 0 age = 20 prize_dict = { '0': ...
- PHP实现微信对账单处理
最近要做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款 ...
- python测试开发django-44.xadmin上传图片和文件
前言 xadmin上传图片和上传文件功能 依赖环境 如果没安装Pillow的话,会有报错:practise.Upload.upload_image: (fields.E210) Cannot use ...
- asp.net core 默认采用小驼峰命名和自定义模型验证
services.AddMvc(options => { options.Filters.Add<ApiExceptionAttribute>(); }).SetCompatibil ...
- Docker万字详解!
一.简介 1.了解Docker的前生LXC LXC为Linux Container的简写.可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性.相当于C+ ...