rust的复合类型和泛型说明

文章介绍了Rust编程语言中的结构体、枚举和泛型概念。结构体定义和实例化方式与C++有所不同,所有权规则是Rust的一大特点。枚举允许定义多种数据类型,匹配可通过match或if-let实现。泛型则类似于C++的模板,提供了一种通用的数据类型功能。
摘要由CSDN通过智能技术生成


前言

这里是简单的对rust复合类型的整理,算是对我自己的rust的初步学习的一个总括。
首先我们看看rust的基本变量类型,一般有i32,i64,u32,u64,f64等,单纯的整形和浮点型变量并不难理解,然后出现稍微麻烦一点的bool型变量和字符串变量以及最后的字符串切边。他们都有属于自己的特性,但是在大体量的rust程序中,他们往往不能够起到统筹整个变量的作用。
这个时候我们就需要用到rust的复合类型变量。包括结构体和枚举,我们同时也会用到泛型来加强程序的通用性。
由于本人在只熟悉C/C++的开发,我在这里作类比会着重挑选C++与rust进行类比。


一、结构体

很多语言中都有它特有的结构体。
C/C++中的结构体是一种非常常用且非常便利的数据结构。

struct {
	int a;
	char b;
	fload c;
};

这种结构体非常直观,个人看来,rust的结构体应该有参考这种。

定义

rust的结构体定义与C++不同点在于
1.rust结构体内部,变量名在前,数据类型在后,用逗号结尾
2.结构体结尾不用分号

eg:

struct  example{
	a:i32,
	b:String
}

实例化

rust结构体实例化如下

let ex=example{
	a:2,
	b:String::from("中国万岁!")
};

所有权

所有权问题是在rust中非常重要的问题
结构体所有权也是如此。
来看一段代码:

fn main()
{
	let a:i32=2;
	let ll=example{
		a:3,
		b
	}
	println!("{}",a);
}

我们可以发现结构体的a会对外部定义的变量a产生覆盖,在输出时,会输出3。

结构体方法

方法是rust中很重要的一种行为方式。

struct rec{
	width:i32,
	length:i32
}
impl rec{
	fn area(&self)->i32{
		self.width*self.length
	}
}

定义一个方法,用impl符号。
方法内的第一个函数必须要包含self参数。

结构体的生命周期问题,我也还没有一个系统的理解,在这里就不献丑了!

二、枚举

1.定义

代码如下(示例):
book枚举类初步定义

enum book{
	paper(u32,
	electronic(String),
}

2.实例化

代码如下(示例):

let bo=book::paper(10);
let ebo=book::electronic(String::from("dianzishu"));

枚举与match语句

enum book{
	paper{index:u32},//结构体键值命名法
	electronic{url:String},
}
fn main()
{
let bo=book::paper{index:10};
match bo{
	book::paper{index}=>{
	println!{"paper book is{}",index}
	}
	book::electronic{url}=>{
	println!{"ebook at {}",url};
	}
	}
}

输出很明确,paper book is 10;

if-let语法

如果我们只需要考虑到一个条件,那么match略显繁琐,我们可以直接采用if-let语法

enum book{
	paper{index:u32},//结构体键值命名法
	electronic{url:String},
}
fn main()
{
let bo=book::paper{index:10};
if let book::paper{index}=book{
	println!{"paper book is{}",index}
	}
}

3 .泛型

泛型

泛型简单来说与C++中的模板非常类似,基本上可以理解为一种意思。
在大型工程文件中,泛型是必不可少的,为了广泛使用多种数据类型的功能。
下面这段代码就是泛型的简单使用,可以看着理解。
fn get_last<T>(array:&[T])->&T{
	&array[array.len()-1]
}
fn main()
{
	let a=["ada","bert","c++"];
	println!("a 的最后一个元素是{}"get_last::<&str>(&a));
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值