wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C&C++

  • PHP

  • Python

  • Go

  • microservice

  • rust

    • windows安装和配置
    • rust的第一个程序
    • cargo
    • 变量和基本类型
    • 函数和模块
      • 函数
      • 模块
        • 调用外部函数:同级调用
        • 调用外部函数:多文件夹
    • 函数参数传递
    • 表达式和语句以及判断
    • 字符串练习
    • 自定义函数和模块的使用
    • 结构体入门和基本写法
    • trait入门
    • 生命周期
    • Vector快速入门
    • 所有权以及所有权转移
    • 宏入门
    • 在struct中使用泛型
  • Java

  • 学习笔记

  • 后端
  • rust
wxvirus
2022-09-04

函数和模块

# 自定义函数和模块的使用

# 函数

fn关键字,后面加上函数名 ,一般是写驼峰式,会发生警告,如果你想写成和java一样驼峰式,我们可以在代码最上面写上:

#[allow(non_snake_case)]
1

代表我允许驼峰。

建议

一般来说,是按照它的建议来写。

# 模块

Module就是模块,用于将函数或结构体按照功能分组,和别的语言的package类似。

使用mod关键字加上名称即可定义模块

mod lib {
    fn show_me() {
        // ...
    }
}
1
2
3
4
5

private

注意,它这里无法调用,是因为显示它是private私有的。

注意: 它的公有关键字是pub,不是public

调用方式,使用两个冒号进行调用方法:lib::show_me()

main.rs

mod lib{
    pub fn show_me() {
        let my_name = "wujie";
        let my_age = 18;
        println!("我的名字是: {}, 年龄是: {}", my_name, my_age);
    }
}
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::show_me();
}

1
2
3
4
5
6
7
8
9
10
11
12

现在是将mod放在main.rs文件里,如果放在外部该如何访问?

# 调用外部函数:同级调用

在和main.rs同级目录创建一个lib.rs

pub fn show_me() {
	let my_name = "wujie";
	let my_age = 18;
	println!("我的名字是: {}, 年龄是: {}", my_name, my_age);
}

1
2
3
4
5
6

这里不使用mod进行包裹。

然后在main.rs

mod lib;
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::show_me();
}

1
2
3
4
5
6

mod lib;默认执行的时候去同级目录下寻找lib.rs文件里的show_me函数,模块名和文件名是一样的。


如果lib.rs的mod没去掉,main.rs想要访问,也得在前面加上pub关键字

pub mod lib {
	pub fn show_me() {
		let my_name = "wujie";
		let my_age = 18;
		println!("我的名字是: {}, 年龄是: {}", my_name, my_age);
	}
}

1
2
3
4
5
6
7
8

而main.rs调用则必须还得再加一层名为lib的模块才能找到函数

mod lib;
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::lib::show_me();
}

1
2
3
4
5
6

# 调用外部函数:多文件夹

上面是在同一级目录下的lib.rs名称是这个,如果在加一层目录

├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│   ├── lib
│   │   └── mod.rs
│   └── main.rs
1
2
3
4
5
6
7

我们把上面的lib.rs删除,新建lib目录,下面新建一个固定名称的mod.rs,如果在main.rs加载lib目录的内容,会首先加载mod.rs,不过前提也得是pub的。

mod.rs

pub mod helper {
	pub fn show_me() {
		let my_name = "wujie";
		let my_age = 18;
		println!("我的名字是: {}, 年龄是: {}", my_name, my_age);
	}
}

1
2
3
4
5
6
7
8

main.rs

mod lib; // lib.rs 或者 lib/mod.rs
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::helper::show_me();
}

1
2
3
4
5
6

注意

mod lib;会加载同级的lib.rs文件或者加载同级目录lib下的mod.rs文件,如果有多个文件夹嵌套,也是一样。

我们再在lib目录下新建一个config.rs,该如何获取它里面的内容

├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│   ├── lib
│   │   ├── config.rs
│   │   └── mod.rs
│   └── main.rs
1
2
3
4
5
6
7
8
pub mod config {
	pub fn show_version() {
		println!("version: 1.0")
	}
}

1
2
3
4
5
6

注意

上面说了会默认先加载mod.rs里的内容,所以在mod.rs里加上引入config的模块

pub mod config; // config.rs 或者 config/mod.rs
pub mod helper {
	pub fn show_me() {
		let my_name = "wujie";
		let my_age = 18;
		println!("我的名字是: {}, 年龄是: {}", my_name, my_age);
	}
}

1
2
3
4
5
6
7
8
9

和main.rs加载模块同理,要么获取同级目录下的同模块名称的rs文件,或者是同一级的模块名目录下的mod.rs。

main.rs调用

mod lib; // lib.rs 或者 lib/mod.rs
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::helper::show_me();

    lib::config::config::show_version();
}

1
2
3
4
5
6
7
8

这里写了 2 个config的原因是config.rs里又套了一层mod,我们可以去掉

pub fn show_version() {
    println!("version: 1.0")
}
1
2
3

main.rs

mod lib; // lib.rs 或者 lib/mod.rs
fn main() {
    println!("u8最大值: {}, 最小值{}", u8::max_value(), u8::min_value());
    lib::helper::show_me();

    lib::config::show_version();
}

1
2
3
4
5
6
7
8
编辑 (opens new window)
#fn#mod
上次更新: 2022/09/04, 12:06:50
变量和基本类型
函数参数传递

← 变量和基本类型 函数参数传递→

最近更新
01
vue3配合vite初始化项目的一些配置
07-26
02
网盘系统开发学习
07-24
03
linux多进程
06-19
更多文章>
Theme by Vdoing | Copyright © 2021-2024 wxvirus 苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式