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() 函数。函数操作的是原始变量。函数调用结束后,当控制返回到主方法时,原始变量的值将为零。
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