Rust常用程式設計概念之變數和可變性

2021-09-27 07:53:32 字數 1805 閱讀 8663

time: 20190921

rust的學習曲線相對陡峭,更好的學習方式是先把概念理清楚,形成相對巨集觀的認知後,再動手實踐,和一般的語言學習方式略有不同。

具體說就是,會涉及到rust語言的以下概念:

預設情況下,變數是不可變的,如果想讓變數顯式可變,則用mut關鍵字修飾即可。

那我們一定想問,這麼設計的目的是什麼?有什麼好處嗎》

fn main()

", x)

; x =6;

println!

("x的值是:{}"

, x)

;}

這種**,vscode編譯器會直接報紅,不用等到執行時就知道錯了。但是通過這個例子,我們可以讀一讀編譯器給出的資訊。

error[e0384]: cannot assign twice to immutable variable `x`

--> src/main.rs:4:5

|2 |

let x = 5;

| -

||| first assignment to `x`

| help: make this binding mutable: `mut x`

3 | println!

("x的值是:{}", x)

;4 | x = 6;

| ^^^^^ cannot assign twice to immutable variable

error: aborting due to previous error

rust的編譯報錯資訊非常細緻,這也是實踐中提高**能力的一種方式。

不能改變變數的值,很自然會讓我們聯想到另乙個概念:常量

區別在**呢?

在rust語言裡,也有const關鍵字修飾變數,表示的是常量。

第乙個區別是,常量不允許新增mut改變為變數。

const max_points: u32 =

100_000;

常量宣告無需let

rust人性化的地方還在於這些小細節,數字之間插入下劃線並不影響定義,只是為了增加可讀性。

官方就說了這些,暫時先就說這麼多吧。

shadowing

這個不是很清楚中文是如何翻譯,從意思上來看,表示遮蓋,定義新的同名變數可以覆蓋前面的同名變數。

fn main()

", x)

;// 12

}

這種做法是定義新的變數,和將變數修飾為mut,再修改變數的值的做法是不同的。

定義新的變數比mut限制少一些,比如下面這種:

let spaces =

" "

;let spaces = spaces.

len();

// ok

如果是定義mut,下面的**是會報錯的:

let mut spaces =

" "

;spaces = spaces.

len();

// 型別不匹配

即,先行推斷型別已經確定,後面再改時,也需要是相同型別的資料。

2019.10 update:

end.

Rust 通用程式設計概念

變數 基本型別 函式 控制流 rust中的變數預設是不可變的,這樣是為了能夠讓你安全並且方便地寫出複雜 甚至並行的 當乙個變數是不可變時,一旦它繫結到了某個值上面,這個值就再也無法被改變了。1 let x 5 m,2 println the value of x is x 3 x 6 4 canno...

Shell程式設計之變數

一.什麼是變數與變數分類 bash 中預設型別為字串型 使用者自定義變數 變數自定義的 環境變數 儲存的是和系統操作環境相關的資料,可以自定義,但是對於系統生效的環境變數名是固定的 位置引數變數 這種變數主要是用來向指令碼當中傳遞引數或資料的,變數名不能自定義,變數作用是固定的 預定義變數 是bas...

PL SQL程式設計之變數

對於pl sql程式設計,準確的說oracle資料庫儲存過程這一部分,哎呀,當初學習的時候感覺老難了。其實很簡單,就是多學幾遍,學不會再學。慢慢的,就可以搞定了。先來看一下下面這段 declare v num number 20 begin dbms output.put line 請輸出 v nu...