# rust_study_v2 **Repository Path**: DengLibin/rust_study_v2 ## Basic Information - **Project Name**: rust_study_v2 - **Description**: rust 语言学习笔记 - **Primary Language**: Rust - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-24 - **Last Updated**: 2024-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 项目结构 - cargo.toml和cargo.lock文件总是位于项目根目录下。 - 源代码位于src目录下。 - 默认的库入口文件是src/lib.rs。 - 默认的可执行程序入口文件是src/main.rs。 - 其他可选的可执行文件位于src/bin/*.rs(这里每一个rs文件均对应一个可执行文件)。 - 外部测试源代码文件位于tests目录下。 - 示例程序源代码文件位于examples。 - 基准测试源代码文件位于benches目录下。 ### 所有权 所有权同一时间只能一人持有,可变引用也只能同时被一个实例持有,不可变引用则可以被多个实例持有。同时所有权能被转移,在Rust中被称为 move 。 ### 操作符 #### 一元操作符 一元操作符是专门对一个Rust元素进行操纵的操作符,主要包括以下几个: - -: 取负,专门用于数值类型。 - *: 解引用。这是一个很有用的符号,和Deref(DerefMut)这个trait关联密切。 - !: 取反。取反操作相信大家都比较熟悉了,不多说了。有意思的是,当这个操作符对数字类型使用的时候,会将其每一位都置反!也就是说,你对一个1u8进行!的话你将会得到一个254u8。 - &和&mut: 租借,borrow。向一个owner租借其使用权,分别是租借一个只读使用权和读写使用权。 #### 二元操作符 算数操作符,算数运算符都有对应的trait的,他们都在std::ops下: ``` +: 加法。实现了std::ops::Add。 -: 减法。实现了std::ops::Sub。 *: 乘法。实现了std::ops::Mul。 /: 除法。实现了std::ops::Div。 %: 取余。实现了std::ops::Rem。 ``` 位运算符,和算数运算符差不多的是,位运算也有对应的trait。 ```$xslt &: 与操作。实现了std::ops::BitAnd。 |: 或操作。实现了std::ops::BitOr。 ^: 异或。实现了std::ops::BitXor。 <<: 左移运算符。实现了std::ops::Shl。 >>: 右移运算符。实现了std::ops::Shr。 ``` 惰性boolean运算符, ```$xslt && || ! 与 或 非 同C语言 ``` 比较运算符,比较运算符其实也是某些trait的语法糖啦, 不同的是比较运算符所实现的trait只有两个std::cmp::PartialEq和std::cmp::PartialOrd ```$xslt 其中, ==和!=实现的是PartialEq。 而,<、>、>=、<=实现的是PartialOrd。 ``` 类型转换运算符,其实这个并不算运算符,因为他是个单词as。 ```$xslt fn avg(vals: &[f64]) -> f64 { let sum: f64 = sum(vals); let num: f64 = len(vals) as f64; sum / num } ``` 格式化字符串,format! ```$xslt fn main() { let s = format!("{1}是个有着{0:>0width$}KG重,{height:?}cm高的大胖子", 81, "wayslog", width=4, height=178); print!("{}", s); } ```