Skip to content

第二节、函数

函数

函数的定义

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

    another_function(); //调用
}
// fn 定义
fn another_function() {
    println!("Another function.");
}

这里有一个细节,自己定义的函数调用的时候没有"!",而println后面有一个"!",因为println是一个宏而不是一个函数。 后面学到的还有write,vec 都是一个宏,都带有"!"。

函数的参数

fn main() {
   // 调用时传入参数,5
    another_function(5);
}
//在函数的定义里定义了一个参数x,为整型
fn another_function(x: i32) {
    println!("The value of x is: {}", x); //此时x为调用时传入的值,本例为5
}

定义2个参数

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

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

结果:

The measurement is: 5h

语句和表达式

语句没有返回值,而表达式可以。

//语句
let x = 5;

//表达式
{
let mut x = 6;
x +=2;
}

//let y = (let x=5); //报错

    let y = {
        let x = 3;
        x + 1
    };

    println!("The value of y is: {}", y);

表达式返回 x+1,也就是4。

函数返回值

fn five() -> i32 {
    5
}

fn main() {
    let x = five();

    println!("The value of x is: {}", x);
}

很多编程语言 都是 return 5,而rust不是。

-> i32 ,表示函数的返回值是i32类型的。

  • 再次说明表达式和语句
fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1
}
fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1;
}

差别在 ";", 有分号就是语句了。