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...