Rust中Struct的用法是什么,可以做什么
Admin 2022-09-07 群英技术资讯 998 次浏览
今天我们来学习关于“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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了js实现上下滑动轮播,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Javascript 完全套用了 Java 的位运算符,包括按位与&、按位或|、按位异或^、按位非~、左移<<、带符号的右移>>和用0补足的右移>>>。这套运算符针对的是整数,所以对 JavaScript 完全无用,因为 JavaScript 内部,所有数字都保存为双精度浮点数。
这篇文章主要为大家详细介绍了vue iview实现分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我们在一些社区论坛常常会看到留言板,那么留言板功能是如何实现呢?首先我们们要了解基本需求,在留言板模块,用户能够发布评论,而且评论会按照时间排序,最新的评论会将旧的评论抵下去。此外,删除的权限只有博主有,用户不可删除评论。了解完基本需求,接下来介绍一下实现建议留言板效果的具体代码:
这篇文章主要给大家分享js包装对象的内容,下文有具体的介绍和实例,对新手学习和理解js包装对象有一定的帮助,有需要的朋友可以参考借鉴,下面我们一起来学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008