Rust知识篇04-函数

Rust知识篇04-函数

函数认识

最普通的函数

javascript 复制代码
fn add(i: i32, j: i32) -> i32 {
   i + j
 }

上面函数包含了

javascript 复制代码
声明函数的关键字 fn
函数名 add()
参数 i 和 j
参数类型和返回值类型 i32

函数命名规则

函数名和变量名使用蛇形命名法(snake case)

javascript 复制代码
// 例如 
fn add_two() {}

函数参数

Rust 是静态类型语言,因此需要你为每一个函数参数都标识出它的具体类型

javascript 复制代码
fn main() {
    let _a = 8;
    let _b =add(5,6);
    println!("{}",_b);
}
fn add(a,b: i32) -> i32 {
    a + b
}
//报错

🍎上面缺失类型报如下

javascript 复制代码
error: expected one of `:`, `@`, or `|`, found `,`
  --> src\main.rs:28:9
   |
28 | fn add(a,b: i32) -> i32 {
   |         ^ expected one of `:`, `@`, or `|`
   |
   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: if this is a `self` type, give it a parameter name
   |
28 | fn add(self: a,b: i32) -> i32 {
   |        +++++
help: if this is a parameter name, give it a type
   |
28 | fn add(a: TypeName,b: i32) -> i32 {
   |         ++++++++++
help: if this is a type, explicitly ignore the parameter name
   |
28 | fn add(_: a,b: i32) -> i32 {

🍎补充类型以后正常使用

javascript 复制代码
fn main() {
    let _a = 8;
    let _b =add(5,6);
    println!("{}",_b);
}
fn add(a: i32,b: i32) -> i32 {
    a + b
}
// 输出11 

🍎动态类型语言(动态类型系统)

不需要显式地声明变量的类型,变量的类型会在程序运行时根据其值自动推断或改变

javascript 复制代码
JavaScript、Python、Ruby

🍎静态类型语言

类型在编译时就已经确定,编译器会检查类型的一致性,避免类型错误。

javascript 复制代码
C、Java、Rust

函数返回

返回值可以是表达式的返回值,也可以使用 return 提前返回

javascript 复制代码
fn plus_or_minus(x:i32) -> i32 {
    if x > 5 {
        return x - 5
    }

    x + 5
}

fn main() {
    let x = plus_or_minus(5);

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

🍎无返回值()

单元类型 ()是一个零长度的元组。可以用来表达一个函数或表达式没有返回有意义的值

没有 return 语句,Rust 函数也会返回 () 类型

javascript 复制代码
fn main() {
     let x = {  // 这个块表达式没有返回有意义的值
        println!("Hello from block!");
    };
    // 由于块没有返回值,它的返回类型是 `()`
    println!("{:?}", x);  // 输出: ()
} 

🍎永不返回的发散函数!

! 作函数返回类型的时候,表示该函数永不返回( diverging functions )

下面是一个典型的发散函数是一个无限循环,它永远不会返回

javascript 复制代码
fn loop_forever() -> ! {
    loop {
        println!("This loop will run forever!");
    }
}

fn main() {
    // 由于 loop_forever() 永不返回,下面的代码将无法执行到
    loop_forever();
    println!("This will never be printed!");
}



//输出
This loop will run forever!

最后输出一行 
error: 
process didn't exit successfully:
(exit code: 0xc000013a, STATUS_CONTROL_C_EXIT)
相关推荐
xkxnq1 天前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴1 天前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq1 天前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
踏浪无痕1 天前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假1 天前
我们来说一下无锁队列 Disruptor 的原理
java·后端
anyup1 天前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
BBBBBAAAAAi1 天前
Claude Code安装记录
开发语言·前端·javascript
武子康1 天前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr1 天前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
xiaolyuh1231 天前
【XXL-JOB】 GLUE模式 底层实现原理
java·开发语言·前端·python·xxl-job