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

rust 初探 -- 路径(path)

rust 初探 – 路径Path

路径(Path)

  • 目的:为了在 Rust 的模块中找到某个条目,需要使用 路径
  • 两种形式:
    • 绝对路径:从 crate root 开始,使用 crate 名或字面值 crate
    • 相对路径:从当前模块开始,使用 self,super 或当前模块的标识符
  • 路径至少由一个标识符组成,标识符之间使用 ::
    示例:
mod front_of_house {// pub mod hosting {mod hosting {// fn add_to_waitlist() {}fn add_to_waitlist() {}}
}pub fn eat_at_restaurant() {//使用绝对路径调用crate::front_of_house::hosting::add_to_waitlist();// --------------- function `add_to_waitlist` is not publicly re-exported// 因为是私有的//使用相对路径调用front_of_house::hosting::add_to_waitlist();
}

私有边界(privacy boundary)

  • 模块不仅可以组织代码,还可以定义私有边界
  • 如果想把函数或struct 等设为私有,将其放到某个模块中即可
  • Rust 中所有的条目默认是私有的
  • 父级模块无法访问子模块中的私有条目
  • 子模块里可以使用所有祖先模块中的条目
pub 关键字
  • 使用 pub 可以将某些条目设置为公共的

super 关键字

  • 用于访问父级模块路径中的内容,相当于文件目录中的 …
fn sever_order() {}mod back_of_house {fn fix_incorrect_order() {cook_order();super::sever_order();//进入到模块外面// crate::sever_order();}fn cook_order() {}
}

pub struct

  • pub 放在 struct 之前:struct 是公共的,里面的字段默认不是公共的(除非加上 pub)
mod back_of_house {pub struct Breakfast {pub toast: String,fruit: String,}// 关联函数impl Breakfast {pub fn summer(toast: &str) -> Breakfast {Breakfast {toast: String::from(toast),fruit: String::from("peach"),}}}
}pub fn eat_at_restaurant() {let mut meal = back_of_house::Breakfast::summer("rye");meal.toast = String::from("wheat");// meal.fruit = String::from("apple");//field `fruit` of `Breakfast` is privateprintln!("{}", meal.toast)
}

上述示例中,meal.toast 可以访问,但是meal.fruit 因为是私有的,不能访问。

pub enum

  • 和 struct 不一样,如果枚举是公共的,那么它里面的所有枚举默认就是公共的

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 嵌入式必备知识总结(一)
  • 多模态大模型
  • 基于Laravel打造,模块化开发框架助力项目快速落地 Modstart
  • 黑马JavaWeb后端案例开发(包含所有知识点!!!)
  • Serverless Knative冷启动与自动扩缩容研究:从原理到实践
  • 数据结构之《栈》
  • Redis:十大数据类型
  • react antd upload custom request处理多个文件上传
  • letcode - string
  • springboot rbac Security
  • 向量数据库(二):Qdrant
  • 2024网络安全学习路线 非常详细 推荐学习
  • Kafka面试三道题
  • 感知融合算法学习1
  • 讲一下我对C语言指针入门过程
  • 【Amaple教程】5. 插件
  • Android开源项目规范总结
  • Centos6.8 使用rpm安装mysql5.7
  • select2 取值 遍历 设置默认值
  • Unix命令
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 以太坊客户端Geth命令参数详解
  • Java总结 - String - 这篇请使劲喷我
  • MyCAT水平分库
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (6)STL算法之转换
  • (CPU/GPU)粒子继承贴图颜色发射
  • (二)hibernate配置管理
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .cn根服务器被攻击之后
  • .NET 中创建支持集合初始化器的类型
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET程序员迈向卓越的必由之路
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET企业级应用架构设计系列之应用服务器
  • .NET是什么
  • .vimrc 配置项
  • @Autowired @Resource @Qualifier的区别
  • @Conditional注解详解
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ A*实现 ] C++,矩阵地图
  • [Angular] 笔记 20:NgContent
  • [BZOJ]4817: [Sdoi2017]树点涂色