Rust学习笔记以及我的一点想法

yuzhiblue

2025年5月16日 08:51

author

小马过河,不试一下怎么知道

学习rust就像小马过河一样,有人觉得太难了,有人觉得一点也不难。到底难不难只有自己试了才知道,因为每个人的水平、理解力、学习环境和心态都是不一样的。

就目前来说,我确实感觉到难,但是并没有网上说的那么难,因为所有难点都是可以理解的,不至于什么都看不懂,我认为rust和其它语言一样,都是熟能生巧的,都是时间问题。

Rust数据类型

Rust的数据类型分为基础类型和高级类型(复合类型)。

基础类型:各种数值(i32,u8,f64...等等)、字符char、布尔bool、数组arr、切片slice等等;

高级类型(复合类型):String、Vec、元组、结构体、枚举等等;

类型使用规则:能使用基础的类型就绝对不要用高级的类型(避免麻烦,减少出错)。

所有权问题

基础类型都是静态的、都存储在栈上、都可以直接拷贝使用、不存在所有权转移的问题,我们称该特征为Copy特征;

高级类型都是动态的、都存储在堆上、会转移所有权,默认只能通过引用(&String,&Vec![])的方式使用,如果要复制完全一样的值,需要使用clone()方法。

Rust语言和其它语言的区别,就在于这些高级类型的借用上,Rust语言会转移所有权、但是其他的语言不会,所以Rust比别的语言更安全。

借用和引用

引用可以理解为C语言的指针,只不过换了个说法。

与其说是引用,我感觉用索引这个词更合适。即每个值都有它的内存地址索引,就类似数据表一样。

内存中存储的值都是以:(内存地址(索引):值)成对的方式出现。

当你声明x=5时,意思是将数值5绑定到变量x上。如果要获取数值5的内存地址可以通过以下方法:&x;

同样的,当我们将内存地址绑定到y上,那通过内存地址获取到值的方式是*y。

x=5
// 将数值5赋值给x;
// &x为数值5的内存地址,即引用;

y = &x
//将数值5的内存地址(引用)赋值给y;

*y = 5
// 通过索引的内存地址查找数值的方法即*y;

let ref r = 5
// 这里的r就是5的引用,即内存地址。
// 通过r获取值的方式是*r

可变引用只能同时存在1个,可以使用花括号修改作用域来实现使用多个可变引用;

可变引用不可以和不可变引用同时存在;

一个值可以有多个不可变引用或者1个可变引用。

引用和借用规则:能不使用引用和借用就不使用(减少出错)

Rust函数

Rust函数要求参数必须标注类型,有输出的话输出也要标注类型,没有的不用标;

数据类型转换

基础类型用as,as不检查溢出,不支持自定义类型;

From/Into 安全转换。

let my_name ="Pascal";
// my_name的数据类型为字符切片;
// 将my_name转换成String字符串类型有多种方式。

let my_name =String::from("Pascal");
let my_name ="Pascal".tostring();
let my_name ="Pascal".into();
let my_name ="Pascal".to_owned();

以上这四种都能将my_name转换成String字符串类型

say_hello(&s);
say_hello(&s[..]);
say_hello(s.as_str());

以上三种方式都可以将String类型转换成&str类型

字符串可以切片,不能索引,但是切片仍然容易报错。

push_str()追加字符串字面量,也可以追加字符char,但是push()只能追加字符char,因此,以后只用push_str()方法就行了。同理还有insert_str()和insert()

替换方法有三个,replace(),replacen()和replacerange(),前两个是返回一个新的字符串,而不是操作原来的字符串,不用加mut,第三个是操作原字符串,需要加mut

复合类型

rust的整个逻辑更像是个套娃。基础数据类型加mut变成可变的,再加点东西套娃成高级类型,高级类型套娃成复合类型,复合类型继续套娃泛型等等。

专业办理低费率POS机,使用稳定,不乱涨价,不乱扣费,微信联系salesleads

版权声明:本站文章大部分为原创文章,如需转载请提前联系站长获得授权;本站部分内容源自网络,本站承诺绝不用于商业用途,如有冒犯请联系站长删除,谢谢。站长微信:salesleads 本站公众号:企泰7TEC,敬请关注!本文链接:https://7tec.cn/detail/636

抖音快手直播伴侣定时下播助手,无需人工值守,直播利器!免费下载试用!

相关推荐