Rust

3.3 函数

2019-11-14  本文已影响0人  剑有偏锋

Rust 中的函数定义以 fn 开始并在函数名后跟一对圆括号。大括号告诉编译器哪里是函数体的开始和结尾。

Rust 代码中的函数和变量名使用 snake case(蛇形命名法) 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词.

一 函数调用

cargo new functions 创建项目

vim ./src/main.rs 输入以下内容

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

    another_function();
}

fn another_function() {
    println!("Another function")
}
~      

运行
cargo run

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

二 函数参数

在函数签名中,必须 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器不需要你在代码的其他地方注明类型来指出你的意图。

当一个函数有多个参数时,使用逗号分隔

another_function 的声明中有命名为 x , y的参数。x, y 的类型被指定为 i32。
修改mian.rs

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

    another_function(5, 6);
}

fn another_function(x: i32, y: i32) {
    println!("Another function input is : {} {}", x, y);
}

运行结果

 cargo run
   Compiling functions v0.1.0 (/home/li/projects/functions)
    Finished dev [unoptimized + debuginfo] target(s) in 0.40s
     Running `target/debug/functions`
Hello, world!
Another function input is : 5 6

三 包含表达式的函数体

实际上,我们已经使用过语句和表达式。语句(Statements)是执行一些操作但不返回值的指令。表达式(Expressions)计算并产生一个值。

let y = 6; //语句
let y = {
        let x = 3;
        x + 1
    }; //
/*其中语句为表达式,
 {
        let x = 3;
        x + 1
    };*/

注意: 注意结尾没有分号的那一行 x+1,与你见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的结尾加上分号,它就变成了语句,而语句不会返回值。在接下来探索具有返回值的函数和表达式时要谨记这一点。

四 函数返回值

函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return 关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。这是一个有返回值的函数的例子:

fn five() -> i32 {
    5
}

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

    println!("The value of x is: {}", x);
}
上一篇 下一篇

猜你喜欢

热点阅读