Rust学习记录 - PEANUT996
Opened this issue · 0 comments
https://peanut996.cn/posts/study-rust/
一门赋予每个人构建可靠且高效软件能力的语言
引用 在任意给定时间,要么 只能有一个可变引用,要么 只能有多个不可变引用。 引用必须总是有效的。 生命周期省略规则 函数或方法的参数的生命周期被称为输入生命周期 (input lifetimes),而返回值的生命周期被称为输出生命周期 (output lifetimes)
每一个是引用的参数都有它自己的生命周期参数 如果只有一个输入生命周期参数,那么它被赋予所有输出生命周期参数 如果方法有多个输入生命周期参数,不过其中之一因为方法的缘故为&self或 &mut self那么self的生命周期被赋给所有输出生命周期参数 Fn trait FnOnce 消费从周围作用域捕获的变量,闭包周围的作用域被称为其 环境,environment。为了消费捕获到的变量,闭包必须获取其所有权并在定义闭包时将其移动进闭包。其名称的 Once 部分代表了闭包不能多次获取相同变量的所有权的事实,所以它只能被调用一次。 FnMut 获取可变的借用值所以可以改变其环境 Fn 从其环境获取不可变的借用值 孤儿规则 只有当 trait 或者要实现 trait 的类型位于 crate 的本地作用域时,才能为该类型实现 trait。不能为外部类型实现外部 trait。
Option用法记录 Some(T).unwrap()会移入变量的所有权,正确的做法是Some(T).as_ref().unwrap(),将&Option转为Option<&T> Rc/Arc 用法记录 Rc相当于添加了一层引用计数,但不是包裹值,所以不需要unwrap()的类似操作 Cell/RefCell 用法记录 RefCell的存在主要是为了引入内部可变性,在编译时编译器将不会检查,取而代之的是在运行时检查 RefCell的借用有两种:borrow()和borrow_mut(),区别是可变性 选择不同的指针 Rc允许相同数据有多个所有者;Box 和 RefCell 有单一所有者。 Box 允许在编译时执行不可变或可变借用检查;Rc仅允许在编译时执行不可变借用检查;RefCell 允许在运行时执行不可变或可变借用检查。 因为 RefCell 允许在运行时执行可变借用检查,所以我们可以在即便 RefCell 自身是不可变的情况下修改其内部的值