rust笔记
Erick_Lv
菜鸡互啄
展开
-
Rust笔记1 rust基本概念
变量和可变性rust中声明变量是不可变的,比如:let x = 5;x = 6; // 报错如果使用可变的,则需要添加mut关键字:let mut x = 5;x = 6; // 正常执行注意,rust的变量声明为不可变的,与其他语言(比如C++)的const等关键字是有核心区别的。以C++为例,声明const int x = 3;后,x的值是永远不能被改变的,而在rust中...原创 2019-08-23 23:32:47 · 537 阅读 · 0 评论 -
rust笔记12 单元测试
基础原创 2019-08-28 13:23:02 · 283 阅读 · 0 评论 -
rust笔记11 生命周期&引用有效性
函数参数等的生命周期rust保证内存安全的手段之一是没有悬空的引用(指针),而这个靠编译期间强制生命周期检查实现。先给出生命周期的声明方式:&i32 // i32的引用&'a i32 // 带有显式声明周期的引用&'a mut i32 // 带有显式生命周期的可变引用考虑函数一个函数(该函数不会通过编译):f...原创 2019-08-27 22:33:51 · 1368 阅读 · 0 评论 -
rust笔记10 泛型处理
泛型基础基础的部分直接类比C++的泛型,给出代码实例 :struct Point<T> { x: T, y: T}impl<T> Point<T> { fn foo(&self) -> &Point<T> { &self }}// 模板的特化,只针对f32类...原创 2019-08-25 23:58:31 · 655 阅读 · 0 评论 -
rust笔记9 错误处理
rust中没异常机制,这意味着我们不用写出一层层的try...catch语句。异常处理有两个核心的地方,分别是panic!和Result<T, E>泛型。分别总结这两个的核心。panic!是一个异常的宏,出现这个,程序会立刻终止,然后通过panic!的内容打印错误信息。给出代码实例:fn main() { panic!("fatal"); // 这里直接终止掉整个程序}有...原创 2019-08-25 23:17:31 · 366 阅读 · 0 评论 -
rust笔记8 collections基础
vec基础具体细节在代码中,注意引用的技巧,一般使用get()获取元素,这样如果越过边界,返回的是None。fn main() { let v = vec![1, 2, 3, 4, 5]; let x = v.get(2); // match x { Some(3) => println!("OK"), None => pr...原创 2019-08-25 22:05:09 · 696 阅读 · 0 评论 -
rust笔记7 rust中的包管理
rust相比于C++,一个优势在于有一个现代化的包管理系统,我们不用搞各种命令空间和依赖的问题。这里主要记录了一般文件打包的方式。rust中声明包的关键字是mod,如果是公共的,则需要声明为pub mod。rust中,每个文件都是一个包,文件名就是包名。如果是和main.rs同级的文件,可以直接使用文件名作为包名。如果有多级目录,那么每个目录下,都要有一个mod.rs作为包的入口,这点类似于p...原创 2019-08-25 18:11:20 · 2978 阅读 · 0 评论 -
rust笔记6 枚举类型
基础概念rust的枚举类型相对于C++来说,有更强大的表现能力,先给出最基本的定义方式:enum IP{ V4, V6,}fn main() { let ipv4 = IP::V4; let ipv6 = IP::V6;}枚举类型可以有不同的数据类型,并存储对应的数据,给出代码实例:enum IP { V4(u8, u8, u8, u8),...原创 2019-08-25 15:53:40 · 949 阅读 · 0 评论 -
rust笔记5结构体
结构体基础结构体的基本定义方式和使用方式:struct User { username: String, email: String, sign_in_count: u64, active: bool,}fn main() { // 注意这里必须制定所有的作用域,否则会报错!! let user1 = User { user...原创 2019-08-25 14:05:54 · 407 阅读 · 1 评论 -
rust笔记4 slice类型
字符切片先给出个例子:fn main() { let s = String::from("hello world !"); let slice0 = &s[0..5]; let slice1 = &s[..5]; let slice2 = &s[6..s.len()]; let slice3= &s[6..]; l...原创 2019-08-25 01:09:45 · 303 阅读 · 0 评论 -
rust笔记3 reference&borrow
引用的概念和C++的类似,不过rust中需要严格注意引用是否是可变的。引用的内存模型如下:即如果s引用s1,那么只是s的地址会指向s1指向的地址,但是s没有s1指向内容的所有权,所以当s变量离开作用域时,s1指向的地址不会被销毁。同样的,函数传递引用的时候,也是这个道理。s引用一个不可变的变量s1时,我们无法通过s改变s1的值,除非s1是个可变引用,而且s也是个可变引用。给出rust代码说...原创 2019-08-25 00:34:52 · 696 阅读 · 0 评论 -
rust笔记2 OwnerShip基础概念
首先,要搞清楚栈内存和堆内存对应了那些类型。rust的整型、浮点型、bool型、字面字符串型和tuple型都是栈内存上的;如果使用=,那么这些数据会拷贝一份新的内容。然后,要了解rust的变量作用域,这点直接参考C++的即可。最后给出Owership的规则:rust的每个值都有对应的变量名,这个变量名是owner每个值同时只能有一个owner当owner离开作用范围时,值会被释放掉。...原创 2019-08-24 00:19:50 · 262 阅读 · 0 评论 -
rust笔记13 闭包
闭包是一个可捕获周围环境的可执行代码片段,基本的几个定义方式如下:fn add_one_v1 (x: u32) -> u32 { x + 1 }let add_one_v2 = |x: u32| -> u32 { x + 1 };let add_one_v3 = |x| { x + 1 };let add_one_v4 = |x| ...原创 2019-08-29 00:00:50 · 365 阅读 · 0 评论