当前位置: 首页 > news >正文

Rust 结构体

Rust结构体

    • 什么是结构体
    • 定义结构体
    • 元组结构体(tuple struct)
    • C语言风格结构体(C struct)
    • 单元结构体(unit struct)
    • 创建结构体实例
    • 访问实例属性
    • 修改结构体实例属性值
    • 应用场景
      • 1、结构体做参数
      • 2、结构体作为返回值
    • 结构体方法
    • 结构体静态方法

什么是结构体

结构体( struct )可以由各种不同类型组成。使用 struct 关键字来创建。struct 是 structure 的缩写。结构体可以作为另一个结构体的字段。结构体是可以嵌套的。

定义结构体

struct 结构体名称 {字段1:数据类型,字段2:数据类型,...
}

元组结构体(tuple struct)

事实上就是具名元组而已。

struct Color(u8, u8, u8);
struct Point(f64, f64);let black = Color(0, 0, 0);
let origin = Point(0.0, 0.0);

C语言风格结构体(C struct)

struct 结构体名称 {...
}

单元结构体(unit struct)

不带字段,在泛型中很有用。

struct Unit;

创建结构体实例

let 实例名称 = 结构体名称{field1:value1,field2:value2...
};

结构体初始化,其实就是对 结构体中的各个元素进行赋值。

#[derive(Debug)]
struct Person{name: String,addr: String,age: i32,
}fn main() {let s = Person{name: String::from("张三"),addr: String::from("上海浦东"),age: 18,};println!("{:?}", s);    
}

访问实例属性

实例名称 . 属性

println!("{}",s.name);//输出 name字段值

修改结构体实例属性值

结构体实例默认是不可修改的,如果想修改结构体实例,声明时使用mut关键字。

let mut s2 = Person{name: String::from("张三"),addr: String::from("上海浦东"),age: 18,};s2.age=20;  // 修改年龄println!("{:?}",s2);

应用场景

1、结构体做参数

fn show(s: Person) {println!("name is :{} addr is {} age is{}",s.name, s.addr, s.age);
}

2、结构体作为返回值

fn get_value(name: String, addr: String, age: i32) -> Person{return Person{name,addr,age,};
}let s3 = get_value(String::from("李四"),String::from("北京"),30,
);
println!("{:?}", s3);
}

结构体方法

方法(method) 是依附于对象的函数。这些方法通过关键字 self 来访问对象中的数据和其他。方法在 impl 代码块中定义。

与函数的区别
函数:可以直接调用,同一个程序不能出现 2 个相同的函数签名的函数,函数不归属任何 owner
方法:归属某一个 owner,不同的 owner 可以有相同的方法签名,类似于c++类方法。

impl 结构体{fn 方法名(&self, 参数列表) 返回值 {//方法体}
}

implimplement 的缩写。意思是 “实现”的意思。
self 是“自己”的意思,&self 表示当前结构体的实例。 &self 也是结构体普通方法固定的第一个参数,其他参数可选。
结构体方法的作用域仅限于结构体内部。

impl Person {fn get_age(&self) -> i32 {return self.age;}
}println!("age={}", s3.get_age());

结构体静态方法

静态方法,无&self参数。

fn 方法名(参数: 数据类型,...) -> 返回值类型 {// 方法体}

调用方式
结构体名称::方法名(参数列表)


impl Person {...fn get_value(name: String, addr: String, age: i32) -> Person {return Person{name,addr,age,};}
}let s4 = Person::get_value(String::from("王五"),String::from("上海"),20,
);
http://www.dtcms.com/a/507475.html

相关文章:

  • 【2026计算机毕业设计】基于Springboot的微信小程序的古诗词在线学习系统
  • 基于微信小程序的运动康复中心预约系统的设计与实现(SpringBoot+Vue+Uniapp)
  • 微信小程序中使用 Vant Weapp 组件库
  • JAVA无人共享台球杆台球柜系统球杆柜租赁系统源码支持微信小程序
  • c 网站开发程序员网站建设 收费明细
  • dockerfile中CMD和ENTRYPOINT指令
  • 用服务器自建一套无界白板 + 文档协作平台 —— Affine
  • docker可视化面板portainer忘记密码的解决方案
  • Spring 4.1新特性:深度优化与生态整合
  • 湛江网站建设外包网站开发公司报价单模板
  • 画册设计公司网站优书网注册
  • 中国风手机网站模板html自动播放视频
  • 汇编与底层编程笔记
  • 酒店网站建设的需求分析报告做外贸网站赚钱吗
  • 物联网异构设备协同运维中的服务依赖动态解析与容错机制
  • 技术人互助:城市级充电系统(Java 微服务)的落地细节,含 demo 和设备适配经验
  • 如何在GitHub上查看自己提过的Issues
  • 【element-ui】面包屑导航
  • 如何设计一个高端网站简洁大方大气erp系统有哪些功能模块
  • BearPi小熊派 鸿蒙开发入门笔记(2)
  • 《信息系统项目管理师》2017 年下案例分析题及解析
  • 一、新建一个SpringBoot3项目
  • 外贸英文网站开发网站要用什么软件做
  • 凡科网站可以做seo优化周口网站设计
  • 笔记本触摸板无法使用怎么办 5种方法快速恢复
  • C#高级:数据库中使用SQL作分组处理5(Rank() 排名函数)
  • 51单片机基础-外部中断INT
  • dz网站恢复数据库阻止网站查到访问者ip
  • 【机器学习05】神经网络、模型表示、前向传播、TensorFlow实现
  • 视频教做家常菜的网站wordpress招商平台