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学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- Mysql 整数类型的字段的属性设置及常用的函数
数据类型 二.MySQL支持的数据类型 数值类型.日期类型.字符串类型 1.数值类型 1)整数类型 tinyint.smallint.mediumint.int和bigint 2)zerofill属性 ...
- MySQL Index--Change Buffer
Change Buffer功能 当执行INSERT/DELETE/UPDATE三类DML操作需要修改二级索引上数据时,如果需要修改的二级索引页未存在于当前Buffer Pool中,可以先将该" ...
- 高阶函数概念以及map/filter/reduce
什么样的函数叫高阶函数:map(func, *iterables) --> map object 条件:1.函数接受函数作为参数 2.函数的返回值中包含函数 num_l = [1,2,3,4,5 ...
- OpenStack共享组件-Memcache缓存系统
1. 缓存系统 1.1 静态web页面 1> 在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Requ ...
- Mac下安装oh my zsh之后配置环境变量失效问题
背景:在刚拿到mac 的时候,使用了默认的bash,由于工作需要在电脑上安装了maven,在~/.bash_profile 文件中添加了maven的配置如下 $ cat ~/.bash_profile ...
- 实现批量添加10个用户,用户名为user01-10,密码为user后面跟3个随机字符
#!/bin/bash ` do user="user$i" password=$( | md5sum | ) useradd user$i echo "$user$pa ...
- unix域套接字
对于本地通信,unix域套接字通信是internet通信速度的2倍
- Android 网络服务介绍
1. 介绍 Android网络服务主要包括如下四个部分 - ConnectivityService: 提供数据连接管理服务,包括移动数据.WIFI.以太网等 - NetworkPolicyManage ...
- TCP和UDP的常见面试题
问题1]为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文.其中ACK报文是用来应答的,SYN报文是 ...
- pytho模块的加载顺序
当前目录如果有同名的系统模块,那么当前目录的模块会被import,系统模块会被忽略,如: 1 ghostwu@ghostwu:~/python/module$ ls 2 import_test.py ...