Command line
- rustc --version
- rustup update
- rustup self uninstall
- rustup doc
Clion config
- Install plugin: Rust
Hello world
1 | fn main() { |
- linker link.exe not found
rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu
Cargo
- cargo new {project}
- cargo run
- cargo update
- cargo build
develop
- cargo build --release
produce
Variable
- Int
- Float
f32
f64 - Bool
true
false - Char
- Tuple
- Array
Move
1 | let mut s = String::from("hello"); |
String 在内存中大小未知,未实现 copy trait
当 s2 = s 时,s 作用域结束
Copy trait
- int
- bool
- char
- float
- Tuple[all copy trait]
[int, float, …]
[int, String] X
Reference
- 一个可变的引用
- 多个不可变的引用
- 引用必须持续有效
Slice
- 不持有所有权
Construct
1 | struct Person { |
字段初始化简写语法(field init shorthand)
1 | Person { |
从已有结构生辰新结构
1 | let alice = Person { |
使用没有命名字段的元组结构体来创建不同的类型
1 | struct Color(i32, i32, i32); |
结构体数据的所有权
在示例 5-1 中的
User
结构体的定义中,我们使用了自身拥有所有权的String
类型而不是&str
字符串 slice 类型。这是一个有意而为之的选择,因为我们想要这个结构体拥有它所有的数据,为此只要整个结构体是有效的话其数据也是有效的。可以使结构体存储被其他对象拥有的数据的引用,不过这么做的话需要用上 生命周期(lifetimes),这是一个第十章会讨论的 Rust 功能。生命周期确保结构体引用的数据有效性跟结构体本身保持一致。如果你尝试在结构体中存储一个引用而不指定生命周期将是无效的,比如这样:
文件名: src/main.rs
struct User { username: &str, email: &str, sign_in_count: u64, active: bool, }
fn main() {
let user1 = User {
email: “someone@example.com”,
username: “someusername123”,
active: true,
sign_in_count: 1,
};
}
编译器会抱怨它需要生命周期标识符:
error[E0106]: missing lifetime specifier --> | 2 | username: &str, | ^ expected lifetime parameter
error[E0106]: missing lifetime specifier
–>
|
3 | email: &str,
| ^ expected lifetime parameter
第十章会讲到如何修复这个问题以便在结构体中存储引用,不过现在,我们会使用像
String
这类拥有所有权的类型来替代&str
这样的引用以修正这个错误。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !