Rust -- 编程基本概念之函数

轩辕暗神 10月前 ⋅ 162 阅读

函数介绍

函数包含语句和表达式

函数体由一系列的语句和一个可选的结尾表达式构成。目前为止,我们提到的函数还不包含结尾表达式,不过你已经见过作为语句一部分的表达式。因为 Rust 是一门基于表达式(expression-based)的语言,这是一个需要理解的(不同于其他语言)重要区别。其他语言并没有这样的区别,所以让我们看看语句与表达式有什么区别以及这些区别是如何影响函数体的。

语句(Statements)是执行一些操作但不返回值的指令。 表达式(Expressions)计算并产生一个值。让我们看一些例子。

fn main() {
    let x = plus_one(1); //调用函数,并获取返回值
    println!("函数返回值为: {x}");
}

fn plus_one(x: i32) -> i32 { //plus_one函数名
							//x: i32 x形参变量名 :i32数据类型有符号的整型
                            // -> i32 返回值类型 
	println!("进入函数");
    let x = x + 1; //语句
    
     x + 2  //表达式,表达式即为函数返回值
}

1、基本语法

先写一个基本函数,并在main函数中调用: 文件名:src/main.rs

fn main() {
    println!("Hello, world!");
    another_function();
}

fn another_function() {
    println!("Another function.");
}

执行cargo run后,会大输出以下内容:

Compiling functions v0.1.0 (file:///projects/functions)
Finished dev [unoptimized + debuginfo] target(s) in 0.28s
 Running `target/debug/functions`
Hello, world!
Another function.

2、有参函数

文件名:src/main.rs

fn main() {
    another_function(5);
}

fn another_function(x: i32) {
    println!("The value of x is: {x}");
}

传参在another_function方法中,形参需要声明数据类型,,在main函数中,调用时需要传递实参。 在函数签名中,必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器再也不需要你在代码的其他地方注明类型来指出你的意图。而且,在知道函数需要什么类型后,编译器就能够给出更有用的错误消息。 多参数示例: 文件名:src/main.rs

fn main() {
    print_labeled_measurement(5, 'h');
}

fn print_labeled_measurement(value: i32, unit_label: char) {
    println!("The measurement is: {value}{unit_label}");
}

3、有返回值函数

本文最前给出示例就是要一个有参数有返回值的函数:

fn main() {
    let x = plus_one(1); //调用函数,并获取返回值
    println!("函数返回值为: {x}");
}

fn plus_one(x: i32) -> i32 { //plus_one函数名
							//x: i32 x形参变量名 :i32数据类型有符号的整型
                            // -> i32 返回值类型 
	println!("进入函数");
    let x = x + 1; //语句
    
     x + 2  //表达式,表达式即为函数返回值
}

其中返回值表达式可以是任意有结果的值,并且,表达式结尾不能加符号


全部评论: 0

    我有话说: