[Day5] 变数&&部份所有权&&简单的回圈

不知不觉就写了 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);
    }
}

^
这样会让他的continue直接加到他所指定的数值

可能看到这里,有些人觉得,欸欸 你回圈也太水了吧!
是 没错,我承认。但是这是因为我打算明天讲 Vec! 跟 阵列 时讲深入
要不然我写这篇前没想到会把 回圈一起抓出来讲
但是说实话,速度是有点慢没错 该加速了,希望能成功完赛 owob
喔对,如果对於上面所有权有任何问题的可以直接提出。
现在还不了解是正常的,後面会独立出一天来讲,主要是讲的东西还太少了。


<<:  裸机Hyperviser之间比较

>>:  Kotlin Android 第4天,从 0 到 ML - 条件判断

Day30影片教学:Azure小白如何使用Azure Active Directory Identity protection管好管满

在昨天我们谈完Azure小白想早下班-之-使用Azure Synapse Analytics汇入数P...

【第三十天 - Flutter 结赛感想、期许、愿景】

感想 在这三十天,我整理了一下 Sample Code,虽然对初学者来说,可能偏难,但是这些过程,是...

django新手村13-----路由规则

urls.py str有可以用int path('personal_info<str:name...

gMSA 设定无密码的工作排程 (下)

使用gMSA作为Sql Server的服务帐号 有时候为了让管理跨server的资源更方便,服务就需...

新手应该要学什麽程序语言?

Photo by Victoriano Izquierdo on Unsplash 文章同步发布於...