Rust个人学习笔记

感悟:感觉rust好像缝合怪,既有python的影子,又有java和cpp的影子,可能这就是新型编程语言趋势吧。而且他的各种规范很严格很规范,比java还更工程,各种规范不对都有warning。

命名规范:蛇形命名法,跟深度学习的python写法一样。

Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。

cargo

基本上rust都是建一个项目,这样方便管理。

创建项目:

shell 复制代码
cargo new pro_name

编译:

shell 复制代码
cd pro_name
cargo build

直接run

shell 复制代码
cd pro_name
cargo run

删除项目

shell 复制代码
del pro_name -Force

变量不可变

rust中变量默认都是不可变得,如果要改变使用mut关键字来修饰变量。

rust 复制代码
let foo = 3; // 不可变
let mut foo2 = 3; // 可以改变

& 引用在默认情况也是不可变的

crate

翻译为集装箱,类型于cpp中得库,python中得包。

rust 复制代码
use std::io; // 导入io包
use std::rand::Rng; // 导入随机数包

隐藏(shadow)

rust 允许使用同名的新变量来隐藏旧变量的值。

rust 复制代码
let a = 3; // 可以
let a = a * 3; // 可以
let a = a + 3; // 可以

布尔表达式

在cpp中,数字可以隐式转换为布尔值;而rust中,数字不可以隐式转换为布尔值。

cpp:

cpp 复制代码
if(1) puts("YES");
else puts("NO");

rust:

rust 复制代码
if 1 == 1 { // if 1 { } 错误
    println!("YES");
} else {
    println!("NO");
}

matchexpect

expect

Rust 标准库中有很多叫做 Result 的类型:一个通用的 Result 以及在子模块中的特化版本,比如 io::Result

Result 类型是 枚举enumerations,通常也写作 enums 。枚举类型持有固定集合的值,这些值被称为枚举的 成员variants)。第六章将介绍枚举的更多细节。

Result 的成员是 OkErrOk 成员表示操作成功,内部包含成功时产生的值。Err 成员则意味着操作失败,并且包含失败的前因后果。

这些 Result 类型的作用是编码错误处理信息。Result 类型的值,像其他类型一样,拥有定义于其上的方法。io::Result 的实例拥有 expect 方法。如果 io::Result 实例的值是 Errexpect 会导致程序崩溃,并显示当做参数传递给 expect 的信息。如果 read_line 方法返回 Err,则可能是来源于底层操作系统错误的结果。如果 io::Result 实例的值是 Okexpect 会获取 Ok 中的值并原样返回。在本例中,这个值是用户输入到标准输入中的字节数。

match

进行匹配:

rust 复制代码
let guess: u32 = match guess.trim().parse() {
    Ok(num) => num,
    Err(_) => continue,
};

**语句和表达式 **

语句没有返回值

rust 复制代码
let x = 5; // 这是语句,没有返回值
let x = (let y = 5); // 错误,	`y = 5` 没有返回值

函数调用是一个表达式。宏调用是一个表达式。我们用来创建新作用域的大括号(代码块),{},也是一个表达式。

rust 复制代码
let x = 5;
let y = {
	let x = 3;
	x + 1
};
// x = 5, y = 4

这个表达式:

rust 复制代码
{
	let x = 3;
	x + 1
}

是一个代码块,它的值是 4。这个值作为 let 语句的一部分被绑定到 y 上。注意结尾没有分号的那一行 x+1,与你见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。在接下来探索具有返回值的函数和表达式时要谨记这一点。

函数

Rust不关心函数定义在哪里,只要定义了就行(与cpp系不同)。

具有返回值得函数

函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。

rust 复制代码
fn main() {
    println!("{}",foo());
}
fn foo() -> i32 {
    let x = 3;
    x + 1 // 表达式作为返回值
}
rust 复制代码
fn main() {
    println!("{}",foo());
}
fn foo() -> i32 {
    let x = 3;
    return x + 1; // return 返回值
}

函数参数

函数也可以被定义为拥有 参数parameters ),参数是特殊变量,是函数签名的一部分。当函数拥有参数(形参)时,可以为这些参数提供具体的值(实参)。技术上讲,这些具体值被称为参数(arguments ),但是在日常交流中,人们倾向于不区分使用 parameterargument 来表示函数定义中的变量或调用函数时传入的具体值。

在函数签名中,必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器不需要你在代码的其他地方注明类型来指出你的意图。

rust 复制代码
fn main() {
    println!("{}",foo(4));
}
fn foo(x:i32) -> i32 {
    let x = x * x;
    x + 1
}
相关推荐
王俊山IT16 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Mephisto.java1 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
Yawesh_best1 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康3 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
CXDNW3 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙3 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
ssf-yasuo3 小时前
SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
论文阅读·笔记·prompt
As977_3 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi3 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet