您好,登录后才能下订单哦!
这篇文章主要介绍“Rust中的Struct如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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++的类)
方法是在struct(enum、trait对象)的上下文中定义的。
方法的第一个参数是self,self指向被调用的struct 实例(类似于C++的this指针)。
方法在 impl (implement)块中定义的 impl StructName {}
方法的第一个参数可以使 &self,也可以获得其所有权或可变借用,和其他参数一样。
new方法可以构造struct,可以理解为构造函数
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(); }
关于“Rust中的Struct如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。