//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. koa2--nodemailer实现邮箱验证

    依赖包安装: /** * koa-bodyparser用于把formData数据解析到ctx.request.body * 通过ctx.request.body访问请求的参数 * koa-redis用 ...

  2. php学习笔记——学习路线图记录

    PHP学习路线图 最全PHP自学指南 W3Cschool小编 2018-04-24 15:23:51 浏览数 (5381) 分享 收录专辑 对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP ...

  3. Postgresql 常用操作

    表所有者一括变更 select 'alter table public.'|| tablename ||' owner to appuser;' from pg_tables where tableo ...

  4. postman 在pre-request中发送application/x-www-form-urlencoded 格式表单

    postman中在pre-request 发送请求 知识点: json数据解析和遍历 application/x-www-form-urlencoded表单 Array基本使用 js函数 http请求 ...

  5. 关于小程序授权地理位置(wx.getLocation + 用户体验)

    wx.getLocation 如果用户曾点击过一次 “确认授权” , 那么再次调用该接口时将不会出现弹出框(可以直接拿到经纬度) 关于用户体验: 在 onLoad 中判断: 如果用户之前“没有触发过“ ...

  6. docker管理监控方案

    docker相关管理可分为四类:docker基础功能.docker监控.docker集群管理和docker系统认证管理.docker管理的基础或信息来源都是docker命令行或docker API. ...

  7. javascript取元素里面的所有文本内容,过滤掉标签

    textContent主要用法 备注:工作要取富文本里面的内容,但是只取开头前50个左右字符串,就想到textContent,大致总结了一下,大家可以借鉴参考一下textContent有更加信息的内容 ...

  8. ztree根据关键字模糊搜索

    html页面需要引入以下资源 <!-- jquery包,ztree依赖jquery --> <script type="text/javascript" src= ...

  9. Lovers(HDU6562+线段树+2018年吉林站)

    题目链接 传送门 题意 初始时有\(n\)个空串,然后进行\(q\)次操作,操作分为以下两种: wrap l r x:把\(l,r\)中的每个字符串的首尾都加入\(x\),如\(s_i=121,x=3 ...

  10. 使用CefSharp在C#访问网站,支持x86和x64

    早已久仰CefSharp大名,今日才得以实践,我其实想用CefSharp来访问网站页面,然后抓取html源代码进行分析,如果使用自带的WebBrowser控件,可能会出现一些不兼容js的错误. Cef ...