DEV Community

drake
drake

Posted on

Rust的变量绑定

  • Rust是没有GC的,这个确实很神奇;

  • 那么他怎么管理内存呢,有个所有权和借用的概念;通过这个来管理内存,基于这个理念还有个代码层面的东西比较重要,那就是作用域;作用域内存占用,作用域外内存销毁;啥是作用域呢,就是大括号 {}

  • 通常能够看到一个变量只能绑定一个值,不能够更改绑定关系,比如let x = 1 你不能再写一行let x = 2; 其实这里的概念并不是强制性的;算是一个通用代码规范和理想的设计理念;你违规的也不会错,并不会影响编译和运行;所以这里的默认绑定关系不可变,可以理解为一种建议性的,而不是强制性;

  • 换绑不会报错,比如执行下面的代码;但是会有warning

fn main() {
    let x: &str = "hello";
    let x = "world";
    println!("x = {}", x);
}
Enter fullscreen mode Exit fullscreen mode

warning

Image description

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
Enter fullscreen mode Exit fullscreen mode
  • 有些国内的教程存在误导性,或者说说的不清楚,很容易造成初学者误入歧途;比如下面:

Image description

这个站点的教程,这里明显是有问题的,修改绑定虽然不是造成error级别的错误,但是规范用法肯定不能这么用;拉黑吧 (学习一门新知识还真不能只听一家之言,兼听则明,偏听则暗;如果英文好最好还是直接追溯到信息源头)

Top comments (0)