Rust 编程语言中的函数


函数是代码的构建块。它们使我们能够避免编写类似的代码,并有助于将大段代码组织成可重用的组件。

在 Rust 中,函数随处可见。甚至函数定义也是 Rust 中的语句。

Rust 中最重要的函数之一是 main 函数,它是任何软件或应用程序的入口点。

我们在 Rust 中使用 fn 关键字来声明函数。

在 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-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
   Finished dev [unoptimized + debuginfo] target(s) in 1.04s
   Running `target/debug/hello-tutorialspoint`
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-tutorialspoint`
The value of x is : 5
Hello, Tuts!

我们通过调用 sample(5); 来调用函数,这反过来又调用了具有名为 x 的参数的 sample 函数。参数 x 被分配了类型 i32。然后 println()! 宏打印此参数的值。

需要注意的是,如果在函数括号中定义了多个参数,则所有这些参数都必须声明类型。

以下代码片段作为参考。

文件名: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-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
   Finished dev [unoptimized + debuginfo] target(s) in 0.51s
   Running `target/debug/hello-tutorialspoint`
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
}

调用函数 sample 并传递 5 作为参数,然后将该函数返回的值存储到名为 z 的变量中,最后使用 println()! 宏打印该值。

需要注意的是,如果我们将函数 sample 从表达式更改为语句,则 Rust 编译器将抛出编译错误。

文件名:src/main.rs

示例

 实时演示

fn main() {
   let z = sample(5);
   println!("Output is: {}",z);
}
fn sample(x : i32) -> i32{
   x + 1;
}

输出

Compiling hello-tutorialspoint v0.1.0 (/Users/immukul/hello-tutorialspoint)
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-tutorialspoint`

发生这种情况是因为函数 sample 预期返回一个 i32 值,但在其内部,存在一个不计算为值的语句,因此与函数声明相矛盾。只需删除分号即可将语句转换为表达式,代码将正常工作。

更新于: 2021年2月20日

214 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告