rust 初探 -- 路径(path)

rust 初探 -- 路径Path

路径(Path)

  • 目的:为了在 Rust 的模块中找到某个条目,需要使用 路径
  • 两种形式:
    • 绝对路径:从 crate root 开始,使用 crate 名或字面值 crate
    • 相对路径:从当前模块开始,使用 self,super 或当前模块的标识符
  • 路径至少由一个标识符组成,标识符之间使用 ::
    示例:
rust 复制代码
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 关键字

  • 用于访问父级模块路径中的内容,相当于文件目录中的 ...
rust 复制代码
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)
rust 复制代码
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 private
    println!("{}", meal.toast)
}

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

pub enum

  • 和 struct 不一样,如果枚举是公共的,那么它里面的所有枚举默认就是公共的
相关推荐
deviant-ART1 分钟前
java stream 的 findFirst 和 findAny 踩坑点
java·开发语言·后端
Hical_W13 分钟前
C++ 也能优雅写 Web?5 分钟用 Hical 搭建 REST API
开发语言·c++·github
神奇小汤圆15 分钟前
MySQL / MariaDB 主从复制架构实战指南
后端
历程里程碑15 分钟前
55 Linux epoll高效IO实战指南
java·linux·服务器·开发语言·前端·javascript·c++
何包蛋H16 分钟前
Java并发编程核心:JUC、AQS、CAS 完全指南
java·开发语言
用户67570498850218 分钟前
【AI开发实战】从想法到上线,我用AI全栈开发了一款记账微信小程序
后端·aigc·ai编程
Moment19 分钟前
作为前端,如果使用 Langgraph 实现第一个 Agent
前端·javascript·后端
神奇小汤圆20 分钟前
高并发接口总被打崩?我用 ArrayBlockingQueue + 底层源码深度剖析搞定流控
后端
木易 士心21 分钟前
MyBatis Plus 核心功能与用法
java·后端·mybatis
Victor35622 分钟前
MongoDB(93)如何使用变更流跟踪数据变化?
后端