- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策制定
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 函数
函数是可读、可维护和可重用代码的构建块。函数是一组用于执行特定任务的语句。函数将程序组织成逻辑代码块。一旦定义,就可以调用函数来访问代码。这使得代码可重用。此外,函数使程序代码易于阅读和维护。
函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
序号 | 函数及描述 |
---|---|
1 |
定义函数 函数定义指定了特定任务将如何完成。 |
2 |
调用函数 必须调用函数才能执行它。 |
3 |
返回函数 函数还可以将值与控制一起返回给调用方。 |
4 |
参数化函数 参数是向函数传递值的机制。 |
定义函数
函数定义指定了特定任务将如何完成。在使用函数之前,必须先定义它。函数体包含函数应执行的代码。函数命名的规则与变量类似。函数使用 **fn** 关键字定义。定义标准函数的语法如下所示
语法
fn function_name(param1,param2..paramN) { // function body }
函数声明可以可选地包含参数/实参。参数用于向函数传递值。
示例 - 简单函数定义
//Defining a function fn fn_hello(){ println!("hello from function fn_hello "); }
调用函数
必须调用函数才能执行它。此过程称为 **函数调用**。在调用函数时,应传递参数的值。调用另一个函数的函数称为 **调用函数**。
语法
function_name(val1,val2,valN)
示例:调用函数
fn main(){ //calling a function fn_hello(); }
这里,main() 是调用函数。
图示
以下示例定义了一个函数 fn_hello()。该函数将消息打印到控制台。main() 函数调用 fn_hello() 函数。
fn main(){ //calling a function fn_hello(); } //Defining a function fn fn_hello(){ println!("hello from function fn_hello "); }
输出
hello from function fn_hello
从函数返回值
函数还可以将值与控制一起返回给调用方。此类函数称为返回值函数。
语法
可以使用以下两种语法之一来定义具有返回类型的函数。
使用 return 语句
// Syntax1 fn function_name() -> return_type { //statements return value; }
不使用 return 语句的简写语法
//Syntax2 fn function_name() -> return_type { value //no semicolon means this value is returned }
图示
fn main(){ println!("pi value is {}",get_pi()); } fn get_pi()->f64 { 22.0/7.0 }
输出
pi value is 3.142857142857143
带参数的函数
参数是向函数传递值的机制。参数构成函数签名的一部分。在调用函数期间将参数值传递给函数。除非明确指定,否则传递给函数的值的数量必须与定义的参数数量匹配。
可以使用以下技术之一将参数传递给函数:
按值传递
调用方法时,将为每个值参数创建一个新的存储位置。实际参数的值将复制到其中。因此,在被调用方法内部对参数所做的更改不会影响实参。
以下示例声明了一个变量 no,它最初为 5。该变量作为参数(按值传递)传递给 mutate_no_to_zero() 函数,该函数将值更改为零。在函数调用后,当控制权返回到 main 方法时,值将保持不变。
fn main(){ let no:i32 = 5; mutate_no_to_zero(no); println!("The value of no is:{}",no); } fn mutate_no_to_zero(mut param_no: i32) { param_no = param_no*0; println!("param_no value is :{}",param_no); }
输出
param_no value is :0 The value of no is:5
按引用传递
当您按引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。引用参数表示与传递给方法的实际参数相同的内存位置。可以通过在变量名前加 **&** 来按引用传递参数值。
在下面给出的示例中,我们有一个变量 no,它最初为 5。对变量 no 的引用传递给 mutate_no_to_zero() 函数。该函数对原始变量进行操作。在函数调用后,当控制权返回到 main 方法时,原始变量的值将为零。
fn main() { let mut no:i32 = 5; mutate_no_to_zero(&mut no); println!("The value of no is:{}",no); } fn mutate_no_to_zero(param_no:&mut i32){ *param_no = 0; //de reference }
* 运算符用于访问变量 param_no 指向的内存位置中存储的值。这也被称为解除引用。
输出将为:
The value of no is 0.
向函数传递字符串
main() 函数将字符串对象传递给 display() 函数。
fn main(){ let name:String = String::from("TutorialsPoint"); display(name); //cannot access name after display } fn display(param_name:String){ println!("param_name value is :{}",param_name); }
输出
param_name value is :TutorialsPoint