话就不多说了,直接开始今天的内容吧
闭包的别称为「匿名函数」有三个特点
pub fn closure() {
let closure_add = |i: i32, j: i32| -> i32{i + j};
println!("{}", closure_add(1, 5));
}
以上就是最简单的闭包,但是讲的还没有到很完整
let closure_add2 = | i, j | i + j;
println!("{}", closure_add2(7, 8));
如果要省略型式是可以这样写的
他会自动判断传入以及回传形式。
不过,要注意的是
let closure_add2 = | i, j | i + j;
println!("{}", closure_add2(7, 8));
println!("{}", closure_add2(1.5, 5.1));
这样是会编译失败的,因为在第一次使用时就决定了这个闭包的型式。
但是,这不就跟前面所写的函数一样吗。
同样是写在函数中,也可以定义他的型别。
fn init_fn() {
fn inside(i: i32, j: i32) -> i32 { i + j };
}
这样是可以的,只是说最大的差别在,不能使用外部的变数。
也就是说闭包可以这样写。
pub fn closure() {
let a = 1000;
let closure_add1 = |i: i32, j: i32| -> i32{i + j + a};
println!("{}", closure_add1(1, 5));
let closure_add2 = | i, j | i + j + a as f64;
//println!("{}", closure_add2(7, 8));
println!("{}", closure_add2(1.5, 5.1));
}
而函数这样写则会报错
pub fn init_fn() {
let a = 5;
fn inside(i: i32, j: i32) -> i32 { i + j + a };
println!("{}", inside(5, 6));
}
以上大概就是简单的闭包内容,闭包是以 trait 实现的,但是我也还没介绍到 trait 所以就略过了。
绝对不是我懒的讲
那接下来要讲的就是判别式的部份。
在 Rust 中,能够像 C / C++ 一样使用 if / else
这边就不放在 Github 上了。
因为应该蛮好理解的(我懒了 QQ)
let a = 5;
if a == 5 {
println!("{}", a);
}
else if(a == 0) {
println!("{}", a);
}
else {
println!("NOT FIVE OR ZERO");
}
这边的使用方法蛮简单的
但是 if 判断式其实还可以绑定在变数上。
像是这样
let n = 5;
let a = if n > 5 {
5
}
else {
0
};
println!("{}", a);
如果说,这样写起来太过於丑陋,其实 Rust 有跟 C / C++ 中的 switch 差不多的 match
使用方式如下 :
let chk = 5;
match chk {
0 => println!("IT ZERO"),
5 => println!("IT FIVE"),
_ => println!("OTHER"),
}
那在 Rust 中可以使用 @ 来将变数绑定给其他变数 ex:
let chk = 5;
match chk {
0 => println!("IT ZERO"),
n @ 5 => println!("{}", n),
5 => println!("IT FIVE"),
_ => println!("OTHER"),
}
也可以用 num...num 来构造范围。
也可以用 num | num | num 来构造多选项比对。(讲的有点复杂用 code)
那在 Rust 中可以使用 @ 来将变数绑定给其他变数 ex:
let chk = 5;
match chk {
0 => println!("IT ZERO"),
0..10 => println!("IT IN 0..10"),
n @ 5 => println!("{}", n),
5 | 3 | 1 => println!("IT FIVE OR 3 OR 1"),
_ => println!("OTHER"),
}
那今天也写了2000多字了
大概这样 明天介绍啥我还在想 @@ 来个 loop 也不错,顺便几道 Leetcode 吧!
有问题可以提问喔 owo/
9/9
我突然发现我少讲一个点,就是当在使用判断式
如: if else match 时,是不用像 C / C++ 一样外面加一个括号的
if (a == 1){}
C++ 如果是这样 Rust 就能直接省略
if a == 1 {}
总之 大概就这样 半夜突然想到 QQ
<<: [Day8] 从入门到入狱! 用Python窃听电脑键盘事件!
>>: 零信任原则(Zero Trust principles)
在开始今天的主题前,虽然在前面介绍 Slate 时已经有稍微提到过了,我们还是先从 slate 的...
Use Actual Snowflake SnowPro-Core Dumps to Learn F...
第四个范例跟机器视觉与影像辨识有关, 我们先来了解一下什麽是机器视觉. 机器视觉 机器视觉想要做的事...
前言 来为我们的登入者介面 banner 和 footer 吧!! Banner 我的Banner很...
甚麽是类数组 先来打造一个很酷的数组 let obj = { '0': 'a', '1': 'b',...