函数
语法:fn <函数名> ( <参数> ) <函数体>
fn another_function() { //Rust不在乎您在何处定义函数,只需在某个地方定义它们即可 println!("Hello, runoob!"); } fn main() { println!("Hello, world!"); another_function(); } //输出: //Hello, world! //Hello, runoob!
函数命名:函数名称的命名风格是小写字母以下划线分割
函数参数
Rust中定义函数如果需要具备参数必须声明参数名称和类型
fn main() { another_function(5, 6); } fn another_function(x: i32, y: i32) { println!("x 的值为 : {}", x); println!("y 的值为 : {}", y); } //运行结果: //x 的值为 : 5 //y 的值为 : 6
函数体
函数体由一系列可以以表达式结尾的语句组成
语句是执行某些操作且没有返回值的步骤
let a = (let b = 2); //错误, 因为语句let b = 2是没有返回值的
表达式有计算步骤且有返回值, 以下是表达式
//假设标识符a,b,c都已被定义已经被定义 a = 7 b + 2 c * (a + b)
函数体表达式
Rust中可以在一个用{}包括的块里编写一个较为复杂的表达式, 这种表达式叫函数体表达式
fn main() { let x = 5; let y = { let x = 3; x + 1 }; println!("x 的值为 : {}", x); println!("y 的值为 : {}", y); } //输出: //x 的值为 : 5 //y 的值为 : 4
在{}块中可以使用函数语句,最后一个步骤是表达式,此表达式的结果值是整个表达式块所代表的值
注意:函数体表达式里最后一个表达式是不能有分号的
函数体表达式并不能等同于函数体,它不能使用 return 关键字
函数嵌套
函数中可以嵌套另一个函数
fn main() { fn five() -> i32 { let x = 4; x + 1 } println!("five() 的值为: {}", five()); }
函数返回值
函数声明返回值类型的方式, 是在参数声明之后用"->"来声明函数返回值的类型
在函数体中,随时都可以以return关键字结束函数运行并返回一个类型合适的值
fn add(a: i32, b: i32) -> i32 { return a + b; }
注意:Rust不支持自动返回值类型判断
如果函数没有明确声明返回值的类型, 函数将被认为是"纯过程",不允许产生返回值, 即函数体内可以使用return,但return后面不能有返回值表达式
这样做的目的是为了让公开的函数能够形成可见的公报