//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结构体的更多相关文章

  1. C语言——结构体

    struct 是一种把一些数据项组合在一起的数据结构.在Go,Rust这些新语言中都保留了结构体 struct 的概念,这是C的精华. 定义匿名结构体 例:学生信息定义为一个结构体,信息内容包括学生的 ...

  2. Go-常识补充-切片-map(类似字典)-字符串-指针-结构体

    目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散 ...

  3. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  4. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  5. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  6. C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  7. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  8. java socket传送一个结构体给用C++编写的服务器解析的问题

    另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...

  9. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. SqlDataSource控件超时的困惑

      想用最简单的SqlDataSource控件完成对一个记录数很多的表的查询操作,结果出现超时异常,找了些解决方法都不奏效,后来在www.codeproject.com查到高手也放弃了用控件的方法,于 ...

  2. 学习笔记之三十年软件开发之路 - Things I Learnt The Hard Way (in 30 Years of Software Development)

    三十年软件开发之路 https://mp.weixin.qq.com/s/EgN-9bIHonRid1DM0csQDw https://blog.juliobiason.net/thoughts/th ...

  3. Position定位相关知识了解

    一.定位 position属性 1.默认定位:        position:static;    元素框正常生成.块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其 ...

  4. Java 之 HTTP 协议

    HTTP 协议 一.基础 1.概念 HTTP:Hyper  Text Transfer Protocol 超文本传输协议. 传输协议:定义了客户端和服务器端通信时,发送数据的格式. 2.特点 (1)基 ...

  5. 【转】StackTraceElement获取方法调用栈的信息

    本文链接:https://blog.csdn.net/hp910315/article/details/52702199 一.什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法 ...

  6. Cannot assign to read only property 'exports' of object '#<Object>' ,文件名大小写问题!!!

    有些坑不知道怎么就掉进去,可能一辈子都爬不起来!!! 一.错误描述 昨天还好好的,今天早上来从git获取了一下别人提交的代码就出错了!而提交代码的人 运行一点错误都没有!!! cya@KQ-101 M ...

  7. Centos7安装DockerCE

    1. 说明 以下使用的系统为centos7,64位,镜像为CentOS-7-x86_64-Minimal-1804,所有操作以root用户操作 2. 安装Docker官方源 2.1 安装yum工具集 ...

  8. MySQL--使用mysqldump进行数据库版本升级

    在MySQL跨版本升级时,建议使用mysqldump方式导出用户权限和用户数据,即使是小版本升级,导出过程中也应忽略系统数据库,避免系统表不兼容. 导出用户数据库脚本和用户创建脚本 ##======= ...

  9. 《深入理解 Java 虚拟机》读书笔记:Java 内存区域与内存溢出异常

    前言 最近开始看这本书,记得前段时间拿起这本书的时候,心情是相当沉重的!当时的剧本是这样的-- 内景.家里 - 下午 我(画外):唉,有点无聊啊!(偶然撇过书架)这么多书得看到什么时候啊,要不要拿一本 ...

  10. Linux虚拟机安装(rhel 7.4)

    Linux虚拟机安装(rhel 7.4) linux 1. 创建虚拟机 1.1. 新建虚拟机 1.2. 启动虚拟机 附录:部分配置 1. 创建虚拟机 1.1. 新建虚拟机 新建虚拟机 典型虚拟机 稍后 ...