Rust函数


函数是执行特定任务的一组可重用代码语句。

函数声明告诉编译器函数的名称、返回类型和参数,函数定义提供函数的实际函数体。

Sr.No函数说明
1

函数定义

函数定义说明将如何以及如何完成特定任务。

2

函数调用

必须调用一个函数才能执行它。

3

函数返回

函数还可以将值和控制一起返回给调用者。

4

函数参数

参数是一种将值传递给函数的机制。

定义函数


在使用函数之前,必须先对其进行定义。

函数定义说明将如何以及如何完成特定任务,函数体包含应由函数执行的代码。

函数命名的规则类似于变量的命名规则,使用以下命令定义函数fn关键字。

下面给出了定义标准函数的语法:

fn function_name(param1,param2..paramN) {
    //函数体
}

函数声明可以选择包含参数/参数,参数用于将值传递给函数。

示例-简单的函数定义

//定义一个函数
fn fn_hello(){
    println!("hello from function fn_hello ");
}

调用函数


必须调用一个函数才能执行它,此过程称为函数调用。调用函数时,应传递参数值

function_name(val1,val2,valN)

示例:调用函数

fn main(){
    //调用函数
    fn_hello();
}

以下示例定义了一个fn_hello函数。该函数将消息打印到控制台。这main函数调用 fn_hello 函数。

fn main(){
    //调用函数
    fn_hello();
}
//定义一个函数
fn fn_hello(){
    println!("hello from function fn_hello ");
}
hello from function fn_hello

从函数返回值


函数还可以将值和控件一起返回给调用者。这样的函数称为返回函数。

以下语法中的任何一种都可以用于定义具有返回类型的函数。

有return语句

//语法1
fn function_name() -> return_type {
    //语句
    return value;
}

没有return语句的速记语法

//语法2
fn function_name() -> return_type {
    value //没有分号表示将返回此值
}

例子

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函数,将值更改为零。在函数调用之后,当控制权返回主方法时,该值将相同。

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);
}

Output

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; //取消引用
}

*运算符用于访问存储在该变量的存储位置中的值param_no指着。这也称为取消引用。

输出将是:

The value of no is 0.

将字符串传递给函数

main函数将字符串对象传递给display函数。

fn main(){
    let name:String = String::from("newbiego");
    display(name);
    //显示后无法访问名称
}
fn display(param_name:String){
    println!("param_name value is :{}",param_name);
}
param_name value is :newbiego