Rust是没有GC的,这个确实很神奇;
那么他怎么管理内存呢,有个所有权和借用的概念;通过这个来管理内存,基于这个理念还有个代码层面的东西比较重要,那就是作用域;作用域内存占用,作用域外内存销毁;啥是作用域呢,就是大括号
{}
通常能够看到一个变量只能绑定一个值,不能够更改绑定关系,比如
let x = 1
你不能再写一行let x = 2
; 其实这里的概念并不是强制性的;算是一个通用代码规范和理想的设计理念;你违规的也不会错,并不会影响编译和运行;所以这里的默认绑定关系不可变,可以理解为一种建议性的,而不是强制性;换绑不会报错,比如执行下面的代码;但是会有warning
fn main() {
let x: &str = "hello";
let x = "world";
println!("x = {}", x);
}
warning
shixiaolong@drake2shi ruststudy % cargo run
Compiling ruststudy v0.1.0 (/Users/shixiaolong/Documents/ruststudy)
warning: unused variable: `x`
--> src/main.rs:2:9
|
2 | let x: &str = "hello";
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
= note: `#[warn(unused_variables)]` on by default
warning: `ruststudy` (bin "ruststudy") generated 1 warning (run `cargo fix --bin "ruststudy"` to apply 1 suggestion)
Finished dev [unoptimized + debuginfo] target(s) in 0.74s
Running `target/debug/ruststudy`
x = world
- 有些国内的教程存在误导性,或者说说的不清楚,很容易造成初学者误入歧途;比如下面:
这个站点的教程,这里明显是有问题的,修改绑定虽然不是造成error级别的错误,但是规范用法肯定不能这么用;拉黑吧 (学习一门新知识还真不能只听一家之言,兼听则明,偏听则暗;如果英文好最好还是直接追溯到信息源头)
Top comments (0)