Rust 模式匹配示例详解

目录
  • 函数
    • 斐波那契数列函数
  • 小结

函数

今天学习的内容是 Rust 中的函数

函数,和 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 中的重中之重。

以上就是Rust 模式匹配示例详解的详细内容,更多关于Rust 模式匹配的资料请关注我们其它相关文章!

(0)

相关推荐

  • Rust语言中的String和HashMap使用示例详解

    目录 String 新建字符串 更新字符串 使用 + 运算符或 format! 宏拼接字符串 索引字符串 字符串 slice 遍历字符串 HashMap 新建 HashMap HashMap 和 ownership 访问 HashMap 中的值 更新 HashMap 直接覆盖 新插入 更新旧值 总结 String 字符串是比很多开发者所理解的更为复杂的数据结构.加上 UTF-8 的不定长编码等原因,Rust 中的字符串并不如其它语言中那么好理解. Rust 的核心语言中只有一种字符串类型:str

  • Rust指南枚举类与模式匹配详解

    目录 前言 1.Rust基本枚举类语法 1.1.定义枚举 1.2.将数据附加到枚举的变体中 1.3.变体的多种嵌套方式 1.4.定义枚举方法 2.Option枚举 2.1.引入Option枚举解决控制问题 2.2.枚举类的具体使用 3.match控制流运算符 4.if let 语法 前言 书接上文,本篇博客分享的是Rust 枚举类与模式匹配 的知识.作为安全性强的语言,Rust 的枚举类并不像其他编程语言中的概念那样简单,但依然可以十分简单的使用. 1.Rust基本枚举类语法 枚举允许我们列举所

  • Go调用Rust方法及外部函数接口前置

    前言 近期 Rust 社区/团队有些变动,所以再一次将 Rust 拉到大多数人眼前. 我最近看到很多小伙伴说的话: Rust 还值得学吗?社区是不是不稳定呀 Rust 和 Go 哪个好? Rust 还值得学吗? 这些问题如果有人来问我,那我的回答是: 小孩子才做选择,我都要! 当然,关于 Rust 和 Go 的问题也不算新,比如之前的一条推文: 我在本篇中就来介绍下如何用 Go 调用 Rust. 当然,这篇中我基本上不会去比较 Go 和 Rust 的功能,或者这种方式的性能之类的,Just fo

  • Rust使用libloader调用动态链接库

    目录 引言 main.rs 代码 引言 最近需要使用Rust动态调用动态链接库,本来打算是使用libloading的,但是libloading在调用dll中的函数的时,是必须要在编译时确定参数和return的类型的.但后来发现了libloader这个包包,libloader是基于libloading的,但是操作起来却比libloader方便. 我们先需要一个动态链接库,我们可以使用cargo create project-name --lib创建一个动态链接库的项目,然后修改lib.rs后使用c

  • Rust+React创建富文本编辑器

    目录 简介 数据模型 核心逻辑 视图 手动差异化 杂项 总结 简介 在Fiberplane,我们最近遇到了一个有趣的挑战:我们正在使用的富文本编辑器库已经过时了.我们曾经使用Slate.js——一个很好的编辑器——但是当我们为协作编辑实现我们自己的富文本基元时,我们发现我们自己的基元和Slate的数据模型之间的脱节是一个阻碍因素.所以我们开始思考——如果我们建立自己的富文本编辑器(RTE, Rich Text Editor)会怎样? 从一个非常高层次的角度来看,一个富文本编辑器是由两个部分组成的

  • Rust 入门之函数和注释实例详解

    目录 写在前面 函数 参数 语句和表达式 返回值 注释 写在前面 今天我们来学习 Rust 中的函数,最后会捎带介绍一下如何在 Rust 中写注释.也是比较轻量级的一节,大家快速过一下即可. 函数 函数本身是各个语言都支持的类型,我们此前已经多次使用 fn main() 这个函数来承载业务逻辑,fn 可以用来声明一个函数,而 main 函数跟其他语言一样,可以理解为程序启动的[起点],一切逻辑从这里开始. Rust 本身的命名规范是[snake case],即下划线 + 小写,这个其实各个语言都

  • Rust 模式匹配示例详解

    目录 函数 斐波那契数列函数 小结 函数 今天学习的内容是 Rust 中的函数. 函数,和 if 条件控制,while.loop.for 循环控制,在底层都是使用跳转实现的,所以函数也属于流程控制的一种.可以这样理解,当函数执行时,程序的执行主体就进入了函数内部,当函数执行完毕,则又返还回去,这就是函数的流程控制. Rust 中使用函数和 Typescript 比较像,需要关注参数的类型和返回值的类型, 再就是有一点 Rust 语言的特性,返回值可以是一个表达式. 参数的类型注解和变量是一样的,

  • Swift进阶教程Mirror反射示例详解

    目录 元类型与.self AnyObject AnyClass Any type(Of:) self self在方法里面的作用 Self Swift Runtime Mirror Mirror的基本用法 Mirror的简单应用-JSON解析 Mirror源码解析 Enum Metadata探索 还原TargetEnumMetadata 还原TargetEnumDescriptor 相对偏移指针 打印枚举中的属性 Struct Metadata探索 获取结构体的属性 swift_getTypeBy

  • wasm+js实现文件获取md5示例详解

    目录 引言 本文重点 准备工作 测试代码 纯js测试代码 wasm(go)源码 js+wasm测试代码 测试条件 测试目标 chrome (版本:103.0.5060.114) firefox (版本号:103.0.1 (64 位)) 分段计算测试代码 纯js js+wasm 测试结论 firefox chrome 最终结论 引言 在过去的几年里,wasm的话题那真是从早上聊到晚上,可以说处于异常兴奋的状态,但是几年过去了,它慢慢的被大多数人们忘记,原因比较简单——落地难 今天就wasm能给js

  • TypeScript新语法之infer extends示例详解

    目录 正文 模式匹配 提取枚举的值的类型 总结 正文 我们知道,TypeScript 支持 infer 来提取类型的一部分,通过模式匹配的方式. 模式匹配 比如元组类型提取最后一个元素的类型: type Last<Arr extends unknown[]> = Arr extends [...infer rest,infer Ele] ? Ele : never; 比如函数提取返回值类型: type GetReturnType<Func extends Function> = F

  • Java7到Java17之Switch语句进化史示例详解

    目录 前言 Java 7 Java 8 Java 12 Java 13 Java 14 Java 17 总结 前言 自 Java 7 以来,java 中的 switch 语句经历了快速发展.因此,在本文中,我们将通过示例讨论 switch 语句从 java 7 到 java 17 的演变或变化. Java 7 在 Java 7 之前,switch case 中只能使用整数,这个语法持续了很长的一段时间. int value = 5; switch (value) { case 1: System

  • AngularJS的Filter的示例详解

    贴上几个有关Filter使用的几个示例. 1. 首先创建一个表格 <body ng-app="app"> <div class="divAll" ng-controller="tableFilter"> <input type="text" placeholder="输入你要搜索的内容" ng-model="key"> <br><br

  • bat批处理 if 命令示例详解

    if 命令示例详解 if,正如它E文中的意思,就是"如果"的意思,用来进行条件判断.翻译过来的意思就是:如果符合某一条件,便执行后面的命令. 主要用来判断,1.两个"字符串"是否相等:2.两个数值是大于.小于.等于,然后执行相应的命令. 当然还有特殊用法,如结合errorlevel:if errorlevel 1 echo error 或者结合defined(定义的意思):if defined test (echo It is defined) else echo 

  • Docker-Compose的使用示例详解

    Docker Compose是一个用来定义和运行复杂应用的Docker工具.使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作. - github.com/docker/compose docker-compose是用来在Docker中定义和运行复杂应用的工具,比如在一个yum文件里定义多个容器,只用一行命令就可以让一切就绪并运行. 使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YU

  • jQuery.Validate表单验证插件的使用示例详解

    jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求. 请在这里查看示例 validate示例 示例包含 验证错误时,显示红色错误提示 自定义验证规则 引入中文错误提示 重置表单需要执行2句话 源码示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <

  • JavaScript中自带的 reduce()方法使用示例详解

    1.方法说明 , Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是: [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) 2. 使用示例 'use strict'; function string2int(s){ if(!s){ alert('the params empty'); return; } if

随机推荐