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
}
相关推荐
武文斌7737 分钟前
arm启动代码总结
arm开发·嵌入式硬件·学习
我怕是好1 小时前
学习stm32 蓝牙
stm32·嵌入式硬件·学习
索迪迈科技1 小时前
STM32F103C8T6开发板入门学习——点亮LED灯2
stm32·嵌入式硬件·学习
摇滚侠1 小时前
Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记03
javascript·笔记·typescript
Learn Beyond Limits2 小时前
The learning process of Decision Tree Model|决策树模型学习过程
人工智能·深度学习·神经网络·学习·决策树·机器学习·ai
岑梓铭2 小时前
考研408《计算机组成原理》复习笔记,第六章(1)——总线概念
笔记·考研·408·计算机组成原理·计组
Suckerbin3 小时前
digitalworld.local: TORMENT
笔记·安全·web安全·网络安全
凯尔萨厮3 小时前
Java学习笔记三(封装)
java·笔记·学习
YoungUpUp3 小时前
【文件快速搜索神器Everything】实用工具强推——文件快速搜索神器Everything详细图文下载安装教程 办公学习必备软件
学习·everything·文件搜索·实用办公软件·everything 工具·文件快速搜索·搜索神器
RaLi和夕4 小时前
单片机学习笔记.C51存储器类型含义及用法
笔记·单片机·学习