上一篇文章中,我们介绍了 Rust 最基础的变量、运算、数据类型、注释等内容:
Rust 基础语法(一) -- 变量、运算与注释

本文,我们就来进一步讲解函数、条件、循环等基础语法。
2.1 函数定义
此前的文章中我们已经介绍过 Rust 的函数:
fn <函数名> ( <参数> ) { <函数体> }
Rust 的函数名命名规范是下划线式:
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Hello, runoob!");
}
2.2 函数参数
Rust 中定义函数如果需要具备参数必须声明参数名称和类型:
fn main() {
another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
println!("x 的值为 : {}", x);
println!("y 的值为 : {}", y);
}
函数参数的传入类型与声明类型必须严格匹配。
2.3 函数体
Rust 中可以在一个用 **{}** 包括的块里编写一个较为复杂的表达式,从而构成一个函数体:
fn main() {
let x = 5;
let y = {
let x = 3;
x + 1
};
println!("x 的值为 : {}", x);
println!("y 的值为 : {}", y);
}
打印出了:
x 的值为 : 5
y 的值为 : 4
- 需要注意的是函数体中的 x+1 末尾是没有分号的,否则它将变成一条语句。
2.4 函数嵌套
在 Rust 中,函数定义可以嵌套:
fn main() {
fn five() -> i32 {
5
}
println!("five() 的值为: {}", five());
}
2.5 函数返回值
fn add(a: i32, b: i32) -> i32 {
return a + b;
}
3.1 条件语句的用法
和许多其他语言类似,Rust 的条件语句并不难理解:
fn main() {
let a = 12;
let b;
if a > 0 {
b = 1;
}
else if a < 0 {
b = -1;
}
else {
b = 0;
}
println!("b is {}", b);
}
总结起来就是这样:
if <condition> { block 1 } else { block 2 }
condition 必须是 bool 类型,也可以加括号括起来,但一般来说并不需要。
3.2 条件语句与函数体表达式结合
条件语句的语法中的 { block 1 } 和 { block 2 } 也可以用函数表达式:
fn main() {
let a = 3;
let number = if a > 0 { 1 } else { -1 };
println!("number 为 {}", number);
}
Rust 语法中的循环有三种:
- while 循环
- for 循环
- loop 循环
4.1 while 循环
fn main() {
let mut number = 1;
while number != 4 {
println!("{}", number);
number += 1;
}
println!("EXIT");
}
打印出了:
1
2
3
EXIT
4.2 for 循环
rust 没有 C 语言中那种三元操作的 for 循环,rust 的 for 循环用于迭代一个元组或数组,类似于 php 中的 foreach 循环:
fn main() {
let a = [10, 20, 30, 40, 50];
for i in a.iter() {
println!("值为 : {}", i);
}
}
4.3 loop 循环
loop 循环就是无限循环:
fn main() {
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
loop {
let ch = s[i];
if ch == 'O' {
break;
}
println!("\'{}\'", ch);
i += 1;
}
}
4.4 loop 循环与函数体表达式
loop 循环可以通过 break 关键字类似于 return 一样使整个循环退出并给予外部一个返回值。这是一个十分巧妙的设计,因为 loop 这样的循环常被用来当作查找工具使用,如果找到了某个东西当然要将这个结果交出去:
fn main() {
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
let location = loop {
let ch = s[i];
if ch == 'O' {
break i;
}
i += 1;
};
println!(" \'O\' 的索引为 {}", location);
}
打印出了:
'0' 的索引为 3
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤
