不知不覺就寫了 1 / 6 了,時間也過太快了。
雖然我怕之後斷掉 QQ 想必讀者全部都會略過這一塊吧 讀的人有點少有點小失落。
不過還是盡快開始今天的內容吧!
在 Rust 中預設的變數都是不可變的
Ex:
let owo = 5;
如果說去改變的話則會報錯
所以如果要定義一個可變的變數的話記得增加 mut 來讓編譯器知道你的數值是會變動的
那以上面 owo 的例子來看,他已經把整數的型式自動套上你的變數了。那如果說想要直接定義型別的話要這樣寫
let mut owo: i32 = 5;
可以看到在上方的範例中我增加了他的型別以及設定他是可變的。
而在 Rust 中使用的型別不是像是 C 一樣寫個 int 或 long 或 double 而是
像是 i32, i16, i8, f32, u64 這樣
let mut a: i8 = 5;
這樣講應該怎麼以此類推也知道了。
喔對 Rust 在審查他的變數時極其嚴格,你是不能直接做兩個型別的操作的,什麼意思?
那我會在這邊提及一些所有權的概念
這邊真的有一點難講 所以這邊大部分會用 Code 來講解
fn main() {
let a: i8 = 5;
let b = a;
println!("{}", a); //Error
}
那為什麼會報錯 因為 b 把 a 的所有權拿走了
也就是代表說類似於 a 被改名為 b
圖片手繪不要嗆我QQ
初始定義如圖所寫
那當今天 B 指向了 A 的記憶體位置 如果 B 改變了數值 請問 A 是否也要更動呢?
因此 Rust 的編譯器會去管控不能出現此狀況所以會把 A 跟該記憶體位置的連結斷開
這個會是最後的結果
那如果真的很想要在所有權交給 B 之後繼續使用 A 的話 可以這樣寫
fn main(){
let a: i8 = 5;
let b = a.clone();
println!({}, a); //AC
}
如圖所示
那麼以上是變數的部份
來講一下迴圈吧!
一如既往,相信有寫過程式的人都知道 for loop 吧
pub fn L() {
for i in 1..5 {
println!("{}", i);
}
}
output
這樣也就是類似於
void L() {
for (int i = 1; i < 5; i++) {
std::cout << i << '\n';
}
}
在 Rust 中呢 還有 單純名為 loop 的迴圈
Q:這個能幹麻呢?
A:當作迴圈
老實說我真的不知道該怎麼講 就真的,只是迴圈
loop{
}
就類似於 while (1) 這樣的感覺
雖然已經有 loop 了 但是還是保留了 while 用法跟 C / C++蠻像的
while i < 5 {}
這樣的感覺,由於過度簡單,就不多贅述了
然後講個小技巧
迴圈可以"被命名"
並且可以使用continue指定跳的位置
Ex:
'outer: for x in 0..10 {
'inner: for y in 0..10 {
if x % 2 == 0 { continue 'outer; }
if y % 2 == 0 { continue 'inner; }
println!("x: {}, y: {}", x, y);
}
}
可能看到這裡,有些人覺得,欸欸 你迴圈也太水了吧!
是 沒錯,我承認。但是這是因為我打算明天講 Vec! 跟 陣列 時講深入
要不然我寫這篇前沒想到會把 迴圈一起抓出來講
但是說實話,速度是有點慢沒錯 該加速了,希望能成功完賽 owob
喔對,如果對於上面所有權有任何問題的可以直接提出。
現在還不了解是正常的,後面會獨立出一天來講,主要是講的東西還太少了。