Rust中Struct的用法是什么,可以做什么
Admin 2022-09-07 群英技术资讯 378 次浏览
今天我们来学习关于“Rust中Struct的用法是什么,可以做什么”的内容,下文有详解方法和实例,内容详细,逻辑清晰,有需要的朋友可以参考,希望大家阅读完这篇文章后能有所收获,那么下面就一起来了解一下吧。
Structs是RUST中比较常见的自定义类型之一,又可以分为StructStruct,TupleStruct,UnitStruct三个类型,结合泛型、Trait限定、属性、可见性可以衍生出很丰富的类型。
1.定义
pub struct User
{
user_id : u32,
user_name: String,
is_vip : bool,
}
2.实例化
这里初始化必须全部给所有的成员赋值,不像C++,可以单独初始化某个值
let user : User = User { user_id: 100, user_name: "matt".to_string(), is_vip: false};
简化赋值,结构体里的字段与声明赋值字段相同时可以省略字段名,后面的字面值不一样,所以必须指定字段名
let user_id : u32 = 101;
let user_name = "matting".to_string();
let vip = true;
let user2:User = User { user_id, user_name, is_vip:vip};
3.获取值
let user_name = user.user_name;
4.可变访问,必须声明成可变的结构体才能可变访问,结构体里的所有元素都是可变的。
let mut user : User = User { user_id: 100, user_name: "matt".to_string(), is_vip: false};
user.user_name = "matt45m".to_string();
5.更新语法,基于某个实例创建一个新实例的时候,可以使用更新语法。…user代表后面的两个字段的值来自第一个结构体
let mut user : User = User { user_id: 100, user_name: "matt".to_string(), is_vip: false};
let user_id : u32 = 101;
let user2:User = User { user_id, ..user};
6.Tuple struct
Tuple struct 整体有指定的名字,但里面的元素没有名字。
struct Color(u8,u8,u8);
let black = Color(0,0,0);
7.struct的方法(rust的struct类似于c++的类)
impl StructName {}
pub struct SlotNode
{
user_name :String,
start_node : u32,//开始节点
end_node : u32,//结束节点
}
impl SlotNode
{
pub fn new() -> Self
{
SlotNode { user_name: String::new(), start_node: 0, end_node: 1024}
}
pub fn get_end_node(&self) -> u32
{
self.end_node
}
}
let slot_node = SlotNode::new();
println!("{}\n", slot_node.get_end_node());
8.struct继承
rust struct的继承没有于C++那种强大的功能,而且概念上也有很大的差异,其实并不算传统意义上的继承。
// 定义一个类似于父类的结构体
#[derive(Debug)]
struct Animal
{
gender: String,
}
impl Animal
{
fn new(gender: String) -> Self
{
Self { gender }
}
}
impl Animal
{
pub fn print_gender(&self)
{
println!("Animal {}", self.gender);
}
fn set_gender(&mut self, gender: String)
{
self.gender = gender;
}
}
// 定义子类
#[derive(Debug)]
struct Cat
{
animal: Animal,
name: String,
}
impl Cat
{
fn new(animal: Animal, name: &str) -> Self
{
Self { animal , name: name.to_string()}
}
}
impl Cat
{
fn as_animal(&self) -> &Animal
{
&self.animal
}
fn as_mut_animal(&mut self) -> &mut Animal
{
&mut self.animal
}
}
fn main() {
let student = Animal::new("male".to_string());
let mut tome = Cat ::new(student, "小橘");
tome.animal.print_gender();
tome.animal.set_gender("femininity".to_string());
tome.animal.print_gender();
println!("{:#?}", tome);
let a: &Animal = tome.as_animal();
a.print_gender();
let a: &mut Animal = tome.as_mut_animal();
a.set_gender("femininity".to_string());
a.print_gender();
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
很多人比较好奇用javascript如何来统计字符的个数?这篇文章小编就给大家分享下用JavaScript统计字符串中字符出现的次数的代码,有需要或者感兴趣的朋友可以深入了解一下。
这篇文章主要介绍了JavaScript时间复杂度和空间复杂度,时间复杂度和空间复杂度是衡量一个算法是否优秀的标准,通常我们比较两个算法时会用预先估算和事后统计,下文详细介绍,需要的朋友可以参考一下
本篇文章给大家带来了关于javascript的相关知识,主要为大家介绍了使用 JS 复制页面内容的三种方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助。
Angular项目中怎么使用 SASS 样式?下面本篇文章给大家介绍一下Angular 中 SASS 样式的使用方法,希望对大家有所帮助!
js中模块化是什么意思?有什么用?很多新手对js中模块化可能不是很了解,对此,下面小编就给大家介绍一下模块化的概念和作用,以及怎样实现模块化,有需要的朋友可以参考,接下来我们一起往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008