3.3 函数
2019-11-14 本文已影响0人
剑有偏锋
Rust 中的函数定义以 fn 开始并在函数名后跟一对圆括号。大括号告诉编译器哪里是函数体的开始和结尾。
Rust 代码中的函数和变量名使用 snake case(蛇形命名法) 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词.
一 函数调用
cargo new functions 创建项目
vim ./src/main.rs 输入以下内容
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function")
}
~
运行
cargo run
Compiling functions v0.1.0 (/home/li/projects/functions)
Finished dev [unoptimized + debuginfo] target(s) in 6.00s
Running `target/debug/functions`
Hello, world!
Another function
二 函数参数
在函数签名中,必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器不需要你在代码的其他地方注明类型来指出你的意图。
当一个函数有多个参数时,使用逗号分隔
another_function 的声明中有命名为 x , y的参数。x, y 的类型被指定为 i32。
修改mian.rs
fn main() {
println!("Hello, world!");
another_function(5, 6);
}
fn another_function(x: i32, y: i32) {
println!("Another function input is : {} {}", x, y);
}
运行结果
cargo run
Compiling functions v0.1.0 (/home/li/projects/functions)
Finished dev [unoptimized + debuginfo] target(s) in 0.40s
Running `target/debug/functions`
Hello, world!
Another function input is : 5 6
三 包含表达式的函数体
实际上,我们已经使用过语句和表达式。语句(Statements)是执行一些操作但不返回值的指令。表达式(Expressions)计算并产生一个值。
let y = 6; //语句
let y = {
let x = 3;
x + 1
}; //
/*其中语句为表达式,
{
let x = 3;
x + 1
};*/
注意: 注意结尾没有分号的那一行 x+1,与你见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。在接下来探索具有返回值的函数和表达式时要谨记这一点。
四 函数返回值
函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。这是一个有返回值的函数的例子:
fn five() -> i32 {
5
}
fn main() {
let x = five();
println!("The value of x is: {}", x);
}