导航
- 一、Rust lib.rs 文件有什么用
- 二、实战
- 1、案例一
- 2、案例2
- (1)修改目录下mod.rs文件
- (2)修改lib.rs文件
一、Rust lib.rs 文件有什么用
按文件描述,他就是一个库文件,整个package只能有一个,那实战中它到底有什么用?不要它行不行?
lib.rs 文件通常用于定义库的公共接口和模块结构
其实我认为,Rust对 文件和函数 的视角和Java、Golang不太一样,把(文件,函数)都看成一个个(模块,模块条目),按(模块、模块条目)来设置可见性,类似public还是private的效果
那每一个模块和模块条目,能否被别的模块使用,我们就需要在lib.rs文件中进行定义引入,这样才,才,才可以使用引用的模块(文件)和模块条目(函数)
二、实战
我们来实战一下,先以一个最简单的例子,
1、案例一
一个package里面有三个文件,分别为lib.rs,main.rs,main2.rs。
假设,我们新建的文件是main2.rs,里面我们写了新函数
我现在想在main.rs中,调用这个eat_at_restaurant1
函数,此时我们什么都不干,直接回到main.rs去尝试调用。
可以发现,是无法导入这个main2模块的,或者说main.rs无法看到main2这个模块,那我们应该怎么办?
这个时候lib.rs的作用就来了,我们在lib.rs声明有main2.rs这个模块,还可以声明main2.rs是公开的(这样哪怕是不同级别的模块也是可见的)
我们看看lib.rs文件的内容
我们再回到main.rs中,看看能不能使用main2.rs中的函数
这样我们就可以使用main2.rs新创建的函数了
2、案例2
按照案例1来看,难道我每次新创建一个文件都要去lib.rs去mod一下吗,万一我创建了很多,或者是我在一个目录下创建了很多新文件,每个文件下有很多新函数,难道我要一个个去mod吗?这太笨了吧?
假设是一个目录下,有很多新建的文件,我们可以在这个目录下,创建一个mod.rs文件,然后在mod.rs下,去声明,你需要公开该目录下的哪些模块,
举个例子,假设我有一个新目录front_of_house,目录下有两个新文件hostring.rs和serving.rs
!!!!!!!!!注意
两个新文件hostring.rs和serving.rs 我都想能被别的文件使用,那么我们需要这么做
(1)修改目录下mod.rs文件
(2)修改lib.rs文件
首先导入目录这个mod,mod名称和目录名称一样,那么这里就是front_of_house。
这样就相当于我们引入了目录front_of_house,在目录下front_of_house,我们通过mod.rs去声明了我们要公开目录下的什么模块。这样完成的引入声明就完成了
我们在main.rs试试效果
大功告成