Rust 编程语言中的函数
函数是代码的构建块。它们允许我们避免编写类似的代码,还有助于将大部分代码组织成可重用的组件。
在Rust中,函数随处可见。甚至函数定义也是Rust中的语句。
Rust中最重要的函数之一是main函数,它是任何软件或应用程序的入口点。
我们使用fn关键字在Rust中声明一个函数。
在Rust中,函数的名称使用蛇形大小写作为常规样式。在蛇的情况下,单词的所有字母都是小写的,_(下划线)用于分隔两个单词。
考虑一个简单的函数,我们在其中打印“Hello,Tuts!”
文件名:src/main.rs
例子
fn main() { println!("Hello, Tuts!"); }
输出
上面代码的输出是-
Hello, Tuts!
在上面的代码片段中,函数定义以fn关键字开头,后跟函数名称后的一对括号。大括号是函数体的一部分,它们告诉编译器函数体的开始和结束位置。
调用另一个函数
在Rust中调用/调用函数类似于其对等语言。我们只需要输入其名称后跟括号。
以以下代码片段为例。
文件名:src/main.rs
例子
fn main() { sample(); println!("Hello, Tuts!"); } fn sample(){ println!("another function”); }
输出
上面代码的输出是-
Compiling hello-nhooo v0.1.0 (/Users/immukul/hello-nhooo) Finished dev [unoptimized + debuginfo] target(s) in 1.04s Running `target/debug/hello-nhooo` another function Hello, Tuts!
Rust并不关心你在哪里定义你正在调用的函数,唯一重要的是它应该被定义。
功能参数
参数是我们在定义函数时放在括号内的值。它们是函数签名的一部分。
让我们稍微修改一下上面的例子,并将一个参数传递给我们正在调用的函数,看看它是如何工作的。
文件名:src/main.rs
例子
fn main() { sample(5); println!("Hello, Tuts!"); } fn sample(x : i32){ println!("The value of x is : {} ", x); }
输出
Finished dev [unoptimized + debuginfo] target(s) in 0.01s Running `target/debug/hello-nhooo` The value of x is : 5 Hello, Tuts!
我们通过调用sample(5)来调用该函数;它依次调用具有名为x的参数的示例函数。参数x被分配了一个类型i32。该println()!marco然后打印此参数的值。
需要注意的是,如果函数括号中定义了多个参数,那么所有这些参数都必须声明一个类型。
考虑以下代码片段作为参考。
文件名:src/main.rs
例子
fn main() { sample(5,7); println!("Hello, Tuts!"); } fn sample(x : i32, y : i32){ println!("The value of x is : {} ", x); println!("The value of y is : {} ", y); }
输出
Compiling hello-nhooo v0.1.0 (/Users/immukul/hello-nhooo) Finished dev [unoptimized + debuginfo] target(s) in 0.51s Running `target/debug/hello-nhooo` The value of x is : 5 The value of y is : 7 Hello, Tuts
带返回值的函数
函数可以向调用者函数返回值。这是函数的一个非常常见的用例。
文件名:src/main.rs
fn main() { let z = sample(5); println!("Output is: {}",z); } fn sample(x : i32) -> i32{ x + 1 }
调用函数示例并将5作为参数传递,然后将该函数的返回值存储到名为z的变量中,最后使用println()!马可。
需要注意的是,如果我们将函数示例从表达式改为语句,那么Rust编译器会抛出编译错误。
文件名:src/main.rs
例子
fn main() { let z = sample(5); println!("Output is: {}",z); } fn sample(x : i32) -> i32{ x + 1; }
输出
Compiling hello-nhooo v0.1.0 (/Users/immukul/hello-nhooo) error[E0308]: mismatched types --> src/main.rs:6:23 | 6 | fn sample(x : i32) -> i32{ | ------ ^^^ expected `i32`, found `()` | | | implicitly returns `()` as its body has no tail or `return` expression 7 | x + 1; | - help: consider removing this semicolon error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. error: could not compile `hello-nhooo`
发生这种情况是因为函数示例应该返回一个i32值,但在其中,存在一个不计算为值的语句,因此与函数声明相矛盾。只需删除分号即可将语句转换为表达式,代码就可以正常工作。