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)
相关推荐
寅时码12 分钟前
无需安装,纯浏览器实现跨平台文件、文本传输,支持断点续传、二维码、房间码加入、粘贴传输、拖拽传输、多文件传输
前端·后端·架构
哔哩哔哩技术34 分钟前
哔哩哔哩Android视频编辑页的架构升级
前端
小小小小宇42 分钟前
重提Vue 3 性能提升
前端
eason_fan43 分钟前
React 源码执行流程
前端·源码阅读
大葱白菜1 小时前
Maven 入门:Java 开发工程师的项目构建利器
java·后端·程序员
大葱白菜1 小时前
Maven 与单元测试:JavaWeb 项目质量保障的基石
java·后端·程序员
二闹1 小时前
一行配置搞定微服务鉴权?别急,真相在这里!
后端·spring cloud·微服务
will_we1 小时前
服务器主动推送之SSE (Server-Sent Events)探讨
前端·后端
天道佩恩1 小时前
WebFlux响应式编程基础工程搭建
java·后端·响应式编程
葫芦和十三1 小时前
解构 Coze Studio:DDD 与整洁架构的 Go 语言最佳实践
后端·领域驱动设计·coze