Rust中的Struct使用示例详解

08-12 45阅读 0评论

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 structTuple 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使用示例详解

到此这篇关于Rust中的Struct使用示例的文章就介绍到这了,更多相关Rust Struct使用内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,45人围观)

还没有评论,来说两句吧...