威海网站建设怎么样,四库一平台查询入口,国家最新房地产政策,新乡网站建设方案一定要牢记Rust是基于表达式的语言#xff0c;除了声明语句和表达式语句外#xff0c;其他的都是表达式。所以if也是表达式#xff0c;它可以被用作右值。
条件控制
if-else。cpp和python得结合。
fn main() {let number 34;if number 0 {println!(number 除了声明语句和表达式语句外其他的都是表达式。所以if也是表达式它可以被用作右值。
条件控制
if-else。cpp和python得结合。
fn main() {let number 34;if number 0 {println!(number 0);} else if number 0 {println!(number 0);} else {println!(number 0);}
}fn main() {let cond true; // 语句和表达式let number if cond {1} else {4};println!({},number);
}循环控制
for
像python
for i in range(1,100): # python的pass// Rust
// [l, r)
for i in 1..10 { // l..r 默认为 [l, r)println!({},i);
}// [l, r]
for i in 1..10 { // 加一个等号表示 左闭 右闭println!({},i);
}遍历数组
fn main() {let a [1,2,3,4,5];for i in a.iter() {println!({},i);}
}// c风格
fn main() {let a [1,2,3,4,5];let n a.len();for i in 0..n {println!({},a[i]);}
}fn main() {let a [1,2,4];// 切片for i in a[..].iter() {pass}// 遍历字符串let str str;for ch i str.chars() {pass}// 遍历动态数组vectorlet c vec![1,2,4];for i in c.iter() {pass}
}需要注意的是使用迭代器遍历得到的不是值本身而是对值的引用类似cpp中的
vectorint a;
for(auto it a.begin(); it ! a.end(); it) {pass;
}需要加上it。
fn main() {let a [1,2,4];// 切片for i in a[..].iter() {if *i 3 {pass}pass}// 遍历字符串let str str;for ch i str.chars() {pass}// 遍历动态数组vectorlet c vec![1,2,4];for i in c.iter() {if *i 3 {pass}pass}
}fn main() {let a [1,2,3,4,5];for i in a[..].iter() {if *i 1 {print!(YES);}}
}fn main() {let str abcdefg;// 字符串不用 *chars不是迭代器类型for ch in str.chars() {println!({},ch);if ch a {println!(YES);}}
}python中的enumerate。
fn main() {let str abcdefg;for (i,ch) in str.chars().enumerate() {println!({} {},i,ch);if ch a {println!(YES);}}
}while
while与python的类似。
# python
n 3
while n 0:print(n)n - 1Rust中的
let mut number 3;
while number 0 {println!({},number);number - 1; // 与python一样没有 -- 这些操作符
}loop
loop相当于while true {}它没有结束的条件只要没有break就一直循环下去。
fn main() {let mut number:i32 3;loop {println!({},number);number - 1;if number 0 {break;}}
}break和continue
与其他编程语言一样的作用。
作为右值
还是那句话Rust是基于表达式的语言这赋予了Rust很多新的特性。像前面提到的if是表达式一样loop和break都是表达式同样可以作为右值
fn main() {let mut number:i32 3;let a loop {println!({},number);number - 1;if number 0 {break 3;}};println!({}, a);
}模式匹配
C/C中有switch可以控制多个流程分支。Rust把switch进行了升级提供了match关键字这是一个非常强大的控制流运算符被称为模式匹配。
这种用法与C/C中switch的用法类似只是每个分支不需要加break。
在Rust中match后面跟一个表达式然后是分支。每个分支又分成两个部分前面的部分叫模式后面是执行体。 match执行时先计算表达式的值然后用该值与模式逐一进行匹配当匹配成功时执行该模式对应的执行体。若多个模式都匹配也只执行第一个匹配成功的执行体。模式必须能覆盖所有的可能性可以使用“_”匹配其他的情况类似于C/C的default。
e.g.假设有1到5元的硬币找到每个硬币类型出现了几次。
fn main() {let a [1, 5, 2, 1, 2, 5, 3, 2, 2, 2, 4, 4];let (mut num1, mut num2, mut num3, mut num4, mut num5) (0,0,0,0,0);for v in a[..].iter() {let val *v;match val {1 num1 1,2 num2 1,3 num3 1,4 num4 1,5 num5 1,_ break}}println!(一元硬币有{} 两元有{} 三元有{} 四元有{} 五元有{},num1, num2, num3, num4, num5);
}