当前位置: 首页 > news >正文

Rust(5): 函数类型

函数

函数,和 if 条件控制,while、loop、for 循环控制,在底层都是使用跳转实现的,所以函数也属于流程控制的一种。可以这样理解,当函数执行时,程序的执行主体就进入了函数内部,当函数执行完毕,则又返还回去,这就是函数的流程控制。

Rust 中使用函数和 Typescript 比较像,需要关注参数的类型返回值的类型, 再就是有一点 Rust 语言的特性,返回值可以是一个表达式。

参数的类型注解和变量是一样的,在参数名为使用冒号 : 指定类型,返回值的类型使用箭头 -> 表示。如果函数没有返回值,则可以省略。

比如一个斐波那契数列函数:

fn fibonacci(n: u64) -> u64 {
    if n < 2 {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

fn main() {
    println!("斐波那契数列的第 10 项是:{:?}", fibonacci(10)); // 55
}

前面说过,Rust 是基于表达式的,函数中也能用到这个特性。一般函数都会使用 return 来结束函数的调用和返回值。Rust 中的函数,如果没有 return,默认会将最后一个表达式的值作为函数的返回值,所以上面的斐波那契数列函数可以写成:

fn fibonacci(n: u64) -> u64 {
    if n < 2 {
        n
    } else {
        fibonacci(n - 1) + fibonacci(n - 2)
    }
}

函数没有返回值时,可以省略返回值的类型,或者写成 ()

fn log1(message: &str) {
    println!("{}", message);
}

fn log2(message: &str) -> () {
    println!("{}", message);
}

fn main() {
    let message = "测试";
    log1(message);
    log2(message);
}

课程收获

这节课学习了 Rust 中的函数类型,从程序执行的角度看,它也属于流程控制的一种。但更多时候我们只把函数看作是对一个功能的封装。Rust 具备函数式编程的特性,所以函数是 Rust 中的重中之重。

相关文章:

  • 【软件测试】软件测试基础概念总结
  • 【Vue五分钟】 Vue Router的使用场景
  • sftpgo集成minio 测试
  • SPI总线协议详解
  • 【产品设计】产品外观设计的特点与优势
  • SpingBoot自动装配原理
  • qt编程中的一些技巧
  • 刷题记录:NC146615简单的数据结构
  • 2022.10月11月todo
  • Pytorch混合精度训练
  • 不会代码(实操能力弱一点)的我如何快速开发出一个Android/Web/IOS/小程序
  • 【博客503】kubelet device plugin如何管理与分配device
  • 第4章-4 验证“哥德巴赫猜想”
  • 嗨购商业模式赋能消费者、创业者和实体商家,助力中小微企业
  • 1469_TC275串口字符串输出例程中的中断功能分析
  • “大数据应用场景”之隔壁老王(连载四)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular 响应式表单 基础例子
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • egg(89)--egg之redis的发布和订阅
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java2019面试题北京
  • javascript 哈希表
  • Java小白进阶笔记(3)-初级面向对象
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue-loader 源码解析系列之 selector
  • 爱情 北京女病人
  • 面试遇到的一些题
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • zabbix3.2监控linux磁盘IO
  • 如何用纯 CSS 创作一个货车 loader
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)软件测试分工
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .cfg\.dat\.mak(持续补充)
  • .Net - 类的介绍
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net的DataSet直接与SQL2005交互
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Autowired和@Resource装配
  • @Controller和@RestController的区别?
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [100天算法】-目标和(day 79)