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

Rust语言入门教程(三) - 函数与模块系统

函数

函数的定义

根据Rust的格式规范,函数名的格式应遵从蛇形命名法,即是用小写字母以及下划线组成,如:

fn do_stuff(){
}

Rust并不要求函数定义的位置必须在调用它之前,所以如果你习惯于把main函数放在最前面的话,是完全没有问题的。

函数的参数格式为参数名: 参数类型, 多个参数之间用,分隔,在参数列表后, 用 ->
指向的类型为函数的返回值类型,花括号内为函数体,格式如下:

fn do_stuff(qty: f64, oz: f64) -> f64{return qty * oz;
} 

尾部表达式(tail expression)

上述的返回语句也可以简写为:

fn do_stuff(qty: f64, oz: f64) -> f64{qty * oz
} 

如上所示,如果一个语句块的最后一行末尾不写分号的话,那最后一行的表达式的值就会被作为这个语句块的返回值, 语句块的最后一行不带分号的表达式,也被成为尾部表达式(tail expression),例如,下面两个语句块是等价的:

// block A
{return true;}// block B
{true}

如果你需要再某个语句块末尾返回一个值的时候,我们常常习惯于使用尾部表达式,而不是return语句.

Rust中的函数并不支持不定数量的参数,或者不定类型的参数,也就是说,函数定义中,参数的个数及每个参数的类型必须都是明确指定的。要实现这个功能,要用到Rust中的宏(macro), 宏与函数类似,只不过宏的命名总是以一个!结尾, 例如常用的打印宏println!.

函数的调用

Rust中的函数调用与大多数其他编程语言类似, 值得注意的是,调用函数的时候,并不支持指定带参数名称的参数传递,因此传参的时候必须严格遵守函数定义时的顺序:

fn main(){let x = do_stuff(2.0, 12.9);
}fn do_stuff(qty: f64, oz: f64) -> f64{qty * oz
} 

模块系统

Rust的模块系统非常强大而且灵活,还是以hello项目为例,我们在src目录下添加一个文件lib.rs, 作为我们的根模块文件。 注意, main.rs是一个特殊的文件,它是程序的入口,是项目的二进制根文件,同时, lib.rs也是一个特殊的文件,它是项目的根模块文件。

lib.rs中添加如下代码:

fn greet() {println!("Hi!");
}

main.rs中,我们修改内容如下:

fn main(){hello::greet(); // won't work yet
}

在上面的代码中, 程序会从hello这个库(名称就是我们当前的项目名称hello)中,查找greet函数并执行,上面的代码基本是是没有问题的,但是,Rust的库(Libary)中的所有元素默认都是私有的(private),即使对库本身的其他模块或binary来说,也是如此。为了把greet函数变为公有的,以便在main.rs中可以调用,我们需要在函数定义前加上pub关键字:

pub fn greet() {println!("Hi!");
}

上述方法调用函数时,写的是绝对路径,包含了包名和函数名,如果调用的包层级特别多时,这样书写起来就比较麻烦了。 与其他语言中的import类似, Rust使用use语句导入第三方或自定义模块, 从而可以在代码的上下文中使用模块中定义的元素(函数或变量等), 例如,上述代码可以简化为:

use hello::greet;fn main(){greet(); // won't work yet
}

Rust标准库中定义的函数,我们会经常用到,可以直接使用,而不用作为dependencies添加到配置文件,例如:

use std::collection::Hashmap;

查询这些标准库的使用方法也很容易,只要在Google中搜索关键字即可, 例如要搜索Vector的用法,只要搜rust std vec就会出来想要的结果。如果是一些第三方库,可以在crates.io网站上找到。如果需要使用第三方库,就要在Cargo.toml文件中添加相应的依赖包的信息,例如:

[package]
name = "hello"
version = "0.1.0"
edition = "2021"[dependencies]
rand = "0.8"

其中rand这个第三方库,可以用来帮助我们进行生成随机数等操作,如:

fn main(){let x = rand::thread_rng().gen_range(0, 100);
}

小结

本章介绍了Rust中函数的格式,定义及调用方法。 以及标准库和第三方库的使用。下一章节将介绍Rust中的基本数据类型和流控制语句。

http://www.lryc.cn/news/242284.html

相关文章:

  • ubuntu22.04 arrch64版在线安装java环境
  • 概率论与数理统计中常见的随机变量分布律、数学期望、方差及其介绍
  • 骨传导耳机的优缺点都有哪些?骨传导耳机值得入手吗?
  • 在ASP.NET Core 中使用 .NET Aspire 消息传递组件
  • NLP学习
  • Linux-Ubuntu环境下搭建SVN服务器
  • python tkinter使用(四)
  • 记录ruoyi-plus-vue部署的问题
  • 如何在springboot项目中使用minio上传下载删除文件
  • SSM个性化旅游管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
  • 4-Docker命令之docker version
  • Redis高并发缓存架构
  • 谨防利用Redis未授权访问漏洞入侵服务器
  • 关于一些bug的解决1、el-input的输入无效2、搜索之后发现数据不对3、el多选框、单选框点击无用4、
  • 使用 JavaScript 进行 API 测试的综合教程
  • Vue 2.0源码分析-Virtual DOM
  • (HAL库版)freeRTOS移植STMF103
  • vue2-axios
  • 创建maven的web项目
  • 使用uniapp开发系统懒加载图片效果
  • 导入PIL时报错
  • MyBatis Generator 插件 详解自动生成代码
  • SkyWalking全景解析:从原理到实现的分布式追踪之旅
  • 新手如何买卖可转债,可转债投资基础入门
  • 研习代码 day39 | 动态规划——完全背包的应用
  • Rust语言入门教程(五) - 流控制语句
  • 字符串:leetcode1410. HTML 实体解析器
  • springboot+vue项目如何集成onlyoffice开源文档组件
  • Android okhttp3.0配置https信任所有证书
  • 大数据基础设施搭建 - Hive