组织管理|路径表示|访问权限

简介: 组织管理|路径表示|访问权限

1、Rust 的代码组织


Package(包):Cargo 的特性,用来构建、测试、共享crate

Crate(箱):一个模块树,它可以产生一个library或可执行文件

Moudle(模块):配合use关键字,用来控制代码的组织、作用域、私有路径等


1.1、包(Package)


当我们使用 Cargo 执行 new 命令创建 Rust 工程时,工程目录下会建立一个 Cargo.toml 文件。


工程的实质就是一个包,包必须由一个 Cargo.toml 文件来管理,该文件描述了包的基本信息以及依赖项。


一个包最多包含一个库"箱"(library crate),可以包含任意数量的二进制"箱"(binary crate),但是至少包含一个"箱"(不管是库还是二进制"箱")。


当使用 cargo new 命令创建完包之后,src 目录下会生成一个 main.rs 源文件,Cargo 默认这个文件为二进制箱的根,编译之后的二进制箱将与包名相同。


1.2、箱(Crate)


"箱"是二进制程序文件或者库文件,存在于包中。


"箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。


注意:“二进制程序文件"不一定是"二进制可执行文件”,只能确定是是包含目标机器语言的文件,文件格式随编译环境的不同而不同。


1.3、模块(Moudle)


1.3.1、moudle的定义


对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。


Java 组织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是 function。


这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。


Rust 中的组织单位是模块(Module)。


1.3.2、建立moudle


使用mod关键字

可多层嵌套

可包含其他项(struct、enum、常量、trait、函数等)的定义

示例:



src/main.rs和 src/lib.rs叫做crate roots:


这里便是一个简单的模块嵌套,子模块中我定义了若干空实现的函数

这两个文件(任意一个)的内容形成了名为crate 的模块,位于整个模块树的根部


2、路径表示


为了在Rust 的模块中找到某个条目,需要使用路径

路径的两种形式:

绝对路径:从crate root 开始,使用crate 名,或者字面值 crate

crate 是根模块,是绝对路径的起始位置

相对路径: 从当前模块开始,使用super或者当前模块的标识符

super:用来访问父级或者同级模块路径中的内容

路径至少由一个标识符组成,标识符之间使用::

示例:


mod front_of_house{
    pub mod hosting{
        pub fn add_waitlist(){print!("调用add_waitlist")}
    }
}
pub fn eat_at_restaurant(){
    crate::front_of_house::hosting::add_waitlist();
    front_of_house::hosting::add_waitlist();
}


3、访问权限


Rust 中有两种简单的访问权:公共(public)和私有(private)。


默认情况下,如果不加修饰符,模块中的成员访问权将是私有的。


如果想使用公共权限,需要使用 pub 关键字。


对于私有的模块,只有在与其平级的位置或下级的位置才能访问,不能从其外部访问。


3.1、super 实例


mod nation {
    pub mod government {
        pub fn govern() {}
    }
    mod congress {
        pub fn legislate() {}
    }
    mod court {
        fn judicial() {
            super::congress::legislate();
        }
    }
}
fn main() {
    nation::government::govern();
}


3.2、struct 实例


如果模块中定义了结构体,结构体除了其本身是私有的以外,其字段也默认是私有的。所以如果想使用模块中的结构体以及其字段,需要 pub 声明:


mod back_of_house {
    pub struct Breakfast {
        pub toast: String,
        seasonal_fruit: String,
    }
    impl Breakfast {
        pub fn summer(toast: &str) -> Breakfast {
            Breakfast {
                toast: String::from(toast),
                seasonal_fruit: String::from("peaches"),
            }
        }
    }
}
pub fn eat_at_restaurant() {
    let mut meal = back_of_house::Breakfast::summer("Rye");
    meal.toast = String::from("Wheat");
    println!("I'd like {} toast please", meal.toast);
}
fn main() {
    eat_at_restaurant()
}
//运行结果:I'd like Wheat toast please


3.3、enum 实例


枚举类变体可以内含字段,但不具备类似的性质:


mod SomeModule {
    pub enum Person {
        King {
            name: String
        },
        Quene
    }
}
fn main() {
    let person = SomeModule::Person::King{
        name: String::from("Blue")
    };
    match person {
        SomeModule::Person::King {name} => {
            println!("{}", name);
        }
        _ => {}
    }
}
//运行结果:Blue


相关文章
|
JSON 运维 JavaScript
教你如何快速接入微信消息通知,使用消息推送服务,「传息」推送消息到个人微信
教你如何快速接入微信消息通知,使用消息推送服务,「传息」推送消息到个人微信
2836 0
|
3月前
|
缓存 JSON 安全
1688 买家端交易 API 全链路实战:订单创建
本文详解1688官方交易接口全链路实践,覆盖账号授权、地址标准化、订单预校验、快速下单、多渠道支付、状态同步及异常容错,适用于分销ERP、跨境SaaS与企业集采系统开发,附生产级容错方案与高频踩坑总结。(239字)
1144 0
|
7月前
|
机器学习/深度学习 自然语言处理 数据可视化
大模型应用:文本转语音实践:Tacotron2预训练模型和SpeechT5模型应用.19
本文详解Tacotron2与SpeechT5两大主流TTS模型:前者是经典序列到序列架构,语音质量高、原理清晰;后者为微软轻量统一模型,支持多语言、多说话人及语音克隆。内容涵盖原理、代码实战、音色定制与语速调节,适合初学者系统入门。
463 23
|
Ubuntu 安全 网络安全
在Ubuntu系统下使用vsftpd配置FTP服务器的步骤
以上就是在Ubuntu系统下使用vsftpd配置FTP服务器的步骤。这些步骤都是基础的,但足够让你建立一个简单的FTP服务器。如果你需要更高级的功能,例如SSL加密、虚拟用户等,你可能需要进一步研究vsftpd的配置选项。
973 13
|
10月前
|
存储 缓存 安全
Python类与实例变量:你真的理解它们的区别吗?
本文深入解析Python中类变量与实例变量的区别,通过20个代码案例详解二者在内存、作用域及生命周期上的差异,涵盖应用场景、常见误区及多线程安全等实战问题,助你掌握面向对象编程核心要点。附免费Python教程链接。
402 0
|
负载均衡 Java 应用服务中间件
Ribbon、Feign和OpenFeign的区别来了
Ribbon、Feign和OpenFeign的区别来了
1280 2
|
存储 大数据 Serverless
首次!统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务
今年双 11 首次规模化亮相的统一调度,通过一套调度协议、一套系统架构,统一管理底层的计算、存储、网络资源,超大规模、高效率、自动化的资源弹性,实现了业界新的突破。在离线混部、离在线混部、新的快上快下技术,减少数万台服务器采购,带来数亿计的资源成本优化和大促效率提升。
2635 113
首次!统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务
|
弹性计算 Linux 数据安全/隐私保护
阿里云幻兽帕鲁Palworld服务器配置及价格整理(2024年版)
阿里云幻兽帕鲁Palworld服务器配置及价格整理(2024年版)幻兽帕鲁Palworld多人游戏专用服务器一键部署教程,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元
10253 0
|
存储 缓存 小程序
uni-app微信小程序保持登录状态(vuex和本地存储)
uni-app微信小程序保持登录状态(vuex和本地存储)
uni-app微信小程序保持登录状态(vuex和本地存储)
|
存储 域名解析 缓存
CDN工作原理及其在淘宝图片业务中的应用
淘宝的图片访问,有98%的流量都走了CDN缓存,只有2%会回源到源站,节省了大量的服务器资源。 但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透cdn,对源站造成巨大的压力。 今年双11,淘宝鹿班的主图价格表达升级项目,就面临了这种挑战,让我们看看是如何解决的吧。
2831 0
CDN工作原理及其在淘宝图片业务中的应用